私自身の小さな PHP アプリケーションでは、curl を使用して Web ページを取得し、処理します。これにより、プロキシを使用する Web サイトと使用しない Web サイトを簡単に選択できるように、Privoxy をプロキシとして使用します。しかし、今日、Google Baidu や他の Web サイトにアクセスすると実際には 403 エラーが返されましたが、他の Web サイトにアクセスする場合は、プロキシを使用しないように設定すると、正常にアクセスできました。
Google Baidu はプロキシ接続を許可していませんか?明らかにそれは不可能なので、curl の情報出力 (curl_setopt($this->mSh, CURLOPT_VERBOSE, 1);) を開いて次の結果を確認してください:
コードをコピーします コードは次のとおりです:
* 127.0 .0.1 を試行しています... * 接続されました
* 127.0.0.1 (127.0.0.1) ポート 8118 (#0) に接続されました
* www.baidu.com:80
> CONNECT www.baidu への HTTP プロキシ トンネルを確立します.com:80 HTTP/1.0
ホスト: www.baidu.com:80
ユーザーエージェント: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1)
プロキシ接続: キープアライブ
< HTTP/1.0 403 接続は許可されません
< 403 from proxy after CONNECT
* Closeing connection #0
... 失敗しました。
を返したのは確かに Baidu であることがわかります。 403エラーですが、原因はまだ私側にあるはずです。最後に、インターネット (1of2、2of2) からインスピレーションを得ました。プロキシの代わりに proxytunnel を使用しました。
コードには次の文があります:
コードをコピーします
コードは次のとおりです:curl_setopt($this->mSh, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($this-> mSh、CURLOPT_PROXY、$ phost);
phpドキュメントには詳細な説明はありませんが、mancurlには詳細な説明があります。両方ともproxytunnel(-pパラメータ)を使用すると、httpプロキシを介して他のプロトコルを送信できます。 、プロキシ (-x パラメータ) は http プロトコルのみを使用できます。つまり、Google Baidu のサーバーがcurlのproxytunnelと競合しているため、403が返されるのだと思います。
上記の 2 行のコードの最初の文を無効にすると、curl アクセスは通常に戻ります。
奇妙なのは、MAC OSX ではプロキシトンネルを明示的に無効にする必要があることです。
コードをコピーします
コードは次のとおりです: $curl -- versioncurl 7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
プロトコル: tftp ftp telnet dict ldap http file https ftps
機能: GSS-Negotiate IPv6 Largefile NTLM SSL libz
他の ubuntu はまったく影響を受けず、何に関係なく使用できます。 Curl のバージョン:
コードをコピー
コードは次のとおりです: $curl --versioncurl 7.18.2 (i486) -pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
プロトコル: tftp ftp telnet dict ldap ldaps http file https ftps
機能: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz MT ホスト上の
centos は問題ありません。curl バージョン:
コードをコピー
コードは次のとおりです: $curl --versioncurl 7.15.5 (i686-redhat-linux-gnu) libcurl /7.15. 5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
プロトコル: tftp ftp telnet dict ldap http file https ftps
機能: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
完全にカールのバージョンの問題、MAC OSX は確かに異なります。
curl が 403 エラーを返す別の理由があります。設定されている場合:
コードをコピーします
コードは次のとおりです: curl_setopt($ch, CURLOPT_NOBODY, true);
必要があります。設定に従います:
コードをコピーします
コードは次のとおりです:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');そうしないと、http サーバーが HEAD コマンドを許可しないため、403 エラーが返されます。参考: PHP での cURL リクエストに関するトラブル (http://forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html)。 MAC OSX 上のカールが特別である理由は、この理由から除外されない可能性があります。
http://www.bkjia.com/PHPjc/778128.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/778128.html技術記事私自身の小さな PHP アプリケーションでは、curl を使用して Web ページを取得し、処理します。これにより、プロキシを使用する Web サイトと使用しない Web サイトを簡単に選択できるように、Privoxy をプロキシとして使用します。でも今日会ったのは…