ホームページ  >  記事  >  バックエンド開発  >  PHP の 403 エラーの解決策 Curl_PHP チュートリアル

PHP の 403 エラーの解決策 Curl_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:29:161154ブラウズ

私自身の小さな 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 上のカールが特別である理由は、この理由から除外されない可能性があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/778128.html技術記事私自身の小さな PHP アプリケーションでは、curl を使用して Web ページを取得し、処理します。これにより、プロキシを使用する Web サイトと使用しない Web サイトを簡単に選択できるように、Privoxy をプロキシとして使用します。でも今日会ったのは…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。