みなさん、おはよう
基本的に、プロキシ サーバーに関連する問題が原因で、Windows 7 開発用 PC から内部および外部サーバーへの cURL 要求を正常に行うことができません。Apache 2.4 で cURL 7.21.2 から PHP 5.3.6 を実行しています。
失敗する最も基本的なリクエストは次のとおりです。
<?php
$curl = curl_init('http://www.google.com');
$log_file = fopen(sys_get_temp_dir() . 'curl.log', 'w');
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_VERBOSE => TRUE,
CURLOPT_HEADER => TRUE,
CURLOPT_STDERR => $log_file,
));
$response = curl_exec($curl);
@fclose($log_file);
print "<pre>{$response}";
次の (完全な) 応答が受信されます。
HTTP/1.1 400 Bad Request
Date: Thu, 06 Sep 2012 17:12:58 GMT
Content-Length: 171
Content-Type: text/html
Server: IronPort httpd/1.1
Error response
Error code 400.
Message: Bad Request.
Reason: None.
cURL によって生成されるログ ファイルには、次の内容が含まれます。
* About to connect() to proxy usushproxy01.unistudios.com port 7070 (#0)
* Trying 216.178.96.20... * connected
* Connected to usushproxy01.unistudios.com (216.178.96.20) port 7070 (#0)
> GET http://www.google.com HTTP/1.1
Host: www.google.com
Accept: */*
Proxy-Connection: Keep-Alive
< HTTP/1.1 400 Bad Request
< Date: Thu, 06 Sep 2012 17:12:58 GMT
< Content-Length: 171
< Content-Type: text/html
< Server: IronPort httpd/1.1
<
* Connection #0 to host usushproxy01.unistudios.com left intact
次のように、プロキシとユーザーの資格情報を明示的に指定しても違いはありません。応答は常に同じです。
<?php
$curl = curl_init('http://www.google.com');
$log_file = fopen(sys_get_temp_dir() . 'curl.log', 'w');
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_VERBOSE => TRUE,
CURLOPT_HEADER => TRUE,
CURLOPT_STDERR => $log_file,
CURLOPT_PROXY => 'http://usushproxy01.unistudios.com:7070',
CURLOPT_PROXYUSERPWD => '<username>:<password>',
));
$response = curl_exec($curl);
@fclose($log_file);
print "<pre>{$response}";
リクエスト行 ('GET ...') に絶対 URL が表示されているのには驚きましたが、HTTP 仕様によると、プロキシ サーバーを扱う場合は問題ないと思います。
私はあらゆる種類のオプションの組み合わせを試しました-ユーザーエージェントの送信、あれこれのフォローなど-スタックオーバーフローの質問や他のサイトを調べましたが、すべてのリクエストは同じ応答で終了します。
コマンドラインでスクリプトを実行しても同じ問題が発生するので、Apache の問題ではないでしょうか。
同じネットワーク上のLinuxボックスから cURL を使用してリクエストを行った場合、問題は発生しません。
私を困惑させているのは「Bad Request」です。私の要求のどこが間違っているのでしょうか? なぜ私がこの問題を経験しているのか分かりますか? Windowsのもの?使用している PHP/cURL のバージョンにバグがありますか?
どんな助けも非常に感謝して受け取りました。どうもありがとう。