1

我在本地和生产服务器()中都收到了一个奇怪的服务器php curl 错误。Ubuntu 14.04.2 LTS, PHP 5.5.9-1ubuntu4.11, Apache 2.4.7

基本上,对远程 API 的 curl 请求会返回状态代码 500 响应,仅在wp_remote_get()中返回状态码 200curl_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(),但仍然是500

我还在调试中禁用了所有插件。

有任何想法吗?

4

2 回答 2

2

好的,经过一番调试,我相信问题是 Wordpress 设置的默认 User-Agent 字符串wp-includes/class-http.php,在创建 http 请求时设置wp_remote_get()

该选项有一个过滤器,但默认是这样创建的:

'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 响应。

不确定分号是否是真正的罪魁祸首,但如果我删除它并将用户代理字符串设置为 just "Wordpress/4.3.1",请求也成功。

于 2015-10-22T16:38:38.683 回答
1

我遇到了同样的问题 - wp_remote_get 在经典的 Curl 呼叫进行呼叫时无法正常工作。确实问题出在 'user agent' 上。这是我基于“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);

谢谢

于 2017-01-26T14:49:28.013 回答