2015-10-16 103 views
0

我得到一個奇怪的服務器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(),但仍然是與它。

我也禁用了所有調試插件。

任何想法?

回答

1

好的,經過一些調試後,我相信問題是在創建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",那麼請求也是成功的。

0

我也遇到了同樣的問題 - 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); 

感謝

我的解決辦法