WordPress使用WP_Http_Curl请求报错certificate
WordPress有wp_remote_post()和wp_remote_get()数据请求函数,这两个函数其实也是使用WP_Http类来请求的。另外还有一个WP_Http_Curl类,这个类可以通过hook来自定义Curl选项。
使用WP_Http_Curl类容易得到一个错误:
wordpress error setting certificate verify locations: CAfile: CApath: none
解决的方法是在参数中指定证书路径:
'sslcertificates' => ABSPATH . WPINC . '/certificates/ca-bundle.crt'
使用WP_Http_Curl类还必须传递一些参数,一个POST上传文件的请求如下:
$http = new WP_Http_Curl;
$response = $http->request($url, [
'method' => 'POST',
'sslverify' => true,
'sslcertificates' => ABSPATH . WPINC . '/certificates/ca-bundle.crt',
'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url('/'),
'stream' => false,
'decompress' => false,
'timeout' => 600,
'filename' => basename($file),
'body' => [
'file' => new \CurlFile($file)
]
]);
判断请求是否成功,如果失败则返回错误信息:
if (is_wp_error($response)) {
return $response->get_error_message();
}
获取返回的header信息:
wp_remote_retrieve_header($response);
获取返回的数据:
wp_remote_retrieve_body($response);