curl - 请求与wp_remote_get()响应500,curl_exec响应200
我得到一个奇怪的服务器php卷曲错误在我的本地和生产服务器(Ubuntu 14.04.2 LTS, PHP 5.5.9-1ubuntu4.11, Apache 2.4.7
)。curl - 请求与wp_remote_get()响应500,curl_exec响应200
基本上,对远程API的卷发请求返回状态码500响应,仅在wp_remote_get()
中返回状态200,并返回curl_exec()
和浏览器请求。
我调试代码:
<?php
$url = 'https://yoast.com?edd_action=activate_license&license=my-license-key-here&item_name=WooCommerce+Yoast+SEO&url=https://google.com';
// this return status 200:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo '<pre>' . print_r($result, true) . '</pre>';
// this return status 500:
$testResp = wp_remote_get($url);
echo '<pre>' . print_r($testResp, true) . '</pre>';
我想不通为什么它响应500 wp_remote_get()
。我试过调整参数传递到wp_remote_get()
,但仍然是与它。
我也禁用了所有调试插件。
任何想法?
好的,经过一些调试后,我相信问题是在创建wp_remote_get()
的http请求时设置的默认User-Agent字符串Wordpress在wp-includes/class-http.php
中设置。
选项有一个过滤器,但默认会创建像这样:
'user-agent' => apply_filters('http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo('url')),
在我的情况
所以,“用户代理”标头值:"Wordpress/4.3.1; http://myurl.com"
当我勾进过滤器http_headers_useragent
并返回一个空字符串,甚至不同的用户代理字符串,如:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/535.6.2 (KHTML, like Gecko) Version/5.2 Safari/535.6.2'
,该请求将返回一个成功的200响应。
不确定分号是否是真正的罪魁祸首,但是如果我删除它并将用户代理字符串设置为"Wordpress/4.3.1"
,那么请求也是成功的。
我也遇到了同样的问题 - wp_remote_get在传统的Curl调用进行调用时无法工作。事实上,问题出在'用户代理'上。这是一种基于 “chuuke” 发现
$args = array(
'user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/535.6.2 (KHTML, like Gecko) Version/5.2 Safari/535.6.2',
);
$data = wp_remote_get($new_url_signed,$args);
感谢
我的解决办法