curl - 请求与wp_remote_get()响应500,curl_exec响应200

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); 

感谢

我的解决办法