1

ローカル サーバーと運用サーバーの両方で奇妙なサーバーphp curl エラーUbuntu 14.04.2 LTS, PHP 5.5.9-1ubuntu4.11, Apache 2.4.7が発生します ( )。

基本的に、リモート API への curl リクエストはステータス コード 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()たが、それでも500です。

また、デバッグですべてのプラグインを無効にしました。

何か案は?

4

2 に答える 2

2

OK、少しデバッグした後、この問題は、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' ) ),

したがって、私の場合、「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 文字列を just に設定すると"Wordpress/4.3.1"、リクエストも成功します。

于 2015-10-22T16:38:38.683 に答える