本地WordPress插件开发遇WP_Error:cURL error 28超时问题求助
解决WordPress本地环境wp_remote_get/post的cURL error 28超时问题
cURL error 28本质是请求超时,本地环境下通常和网络连通性、服务器配置或请求参数有关,以下是针对性的解决步骤:
1. 先确认目标URL的可访问性
- 对于外部API(
self::$api):直接用浏览器或curl命令访问拼接后的$endpoint,看是否能正常返回数据。如果外部API本身不可达,问题不在本地代码。 - 对于本地REST API(
/wp-json/lmfwc/v2/licenses):直接在浏览器打开$licenses_url,检查是否能返回JSON数据。如果打不开,先排查本地WordPress的REST API是否正常(比如 permalink 设置是否正确、相关插件是否冲突)。
2. 调高超时时间
本地环境资源占用高或网络延迟大时,10秒的超时时间可能不够,建议调整为30秒,并单独设置连接超时:
- 在请求参数里增加
'connect_timeout' => 15,(WP 5.6+支持),区分连接超时和响应超时。
3. 修复本地域名解析问题
如果本地用自定义域名(如local.yoursite.com),可能存在解析延迟,改用127.0.0.1代替域名:
// 替换原来的get_site_url() $baseUrl = 'http://127.0.0.1/your-local-site-folder';
4. 检查cURL扩展和服务器配置
- 确认PHP的cURL扩展已启用:创建phpinfo文件,搜索
curl模块,确保状态为已启用。 - 暂时关闭本地防火墙/杀毒软件:这类工具可能拦截WordPress的出站请求,测试关闭后是否恢复正常。
5. 优化请求代码
修改后的Dashboard文件代码
$endpoint = add_query_arg( array( 'code' => $purchase, ), self::$api ); $options = [ 'body' => wp_json_encode( array( 'code' => $purchase ) ), 'method' => 'POST', 'headers' => [ 'Content-Type' => 'application/json' ], 'timeout' => 30, // 延长超时时间 'connect_timeout' => 15, // 单独设置连接超时 'redirection' => 5, 'blocking' => true, 'httpversion' => '1.1', // 改用HTTP/1.1提升兼容性 'sslverify' => false, ]; $remote_test = wp_remote_post( $endpoint, $options ); // 增加错误日志便于调试 if ( is_wp_error( $remote_test ) ) { error_log( 'POST请求失败: ' . $remote_test->get_error_message() ); }
修改后的Verification文件代码
$baseUrl = 'http://127.0.0.1/your-local-site-path'; $args = array( 'timeout' => 30, 'connect_timeout' => 15, 'sslverify' => false, ); // 用add_query_arg拼接参数更规范 $licenses_url = add_query_arg( array( 'consumer_key' => 'ck_a50c1db92c5e5aa63d4', 'consumer_secret' => 'cs_2b3e19c' ), $baseUrl . '/wp-json/lmfwc/v2/licenses' ); $response = wp_remote_get( $licenses_url, $args ); // 增加错误日志便于调试 if ( is_wp_error( $response ) ) { error_log( 'GET请求失败: ' . $response->get_error_message() ); }
6. 排查代理问题
如果本地使用代理服务器,需要在wp-config.php中添加代理配置:
define('WP_PROXY_HOST', 'your-proxy-ip'); define('WP_PROXY_PORT', 'your-proxy-port'); define('WP_PROXY_BYPASS_HOSTS', 'localhost,127.0.0.1');
内容的提问来源于stack exchange,提问作者pooyan golkar
相关产品推荐
相关产品推荐

