Curl – Запрос с wp_remote_get () отвечает 500, curl_exec отвечает 200

Я получаю нечетную ошибку php curl сервера как на локальных, так и на производственных серверах ( Ubuntu 14.04.2 LTS, PHP 5.5.9-1ubuntu4.11, Apache 2.4.7 ).

В принципе, запрос curl для удаленного 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() , но все же 500 с ним.

Я также отключил все плагины при отладке.

Есть идеи?

Хорошо, после небольшой отладки, я считаю, что проблема – это строка User-Agent по умолчанию, установленная WordPress в wp-includes/class-http.php , которая задается при создании HTTP-запроса для wp_remote_get() .

Опция имеет фильтр, но по умолчанию создается так:

 'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ), 

Поэтому в моем случае значение заголовка «user-agent» было: "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.

Не уверен, что точка с запятой является истинным виновником, но если я удалю ее и задаю строку user-agent только "Wordpress/4.3.1" , запрос также будет успешным.

У меня были те же проблемы – wp_remote_get не работал, а классические вызовы Curl выполняли вызовы. Действительно проблема заключается в «пользовательском агенте». Это мое решение, основанное на выводах «чукера»

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

благодаря