- 締切済み
PHPでプロキシ経由で外部にアクセスするには?
PHPで外部サーバのXMLを取得してなんらかの処理を行う場合、SimpleXMLのsimplexml_load_file()を利用してXMLをとってくるという方法があると思いますが、 PHPを動かすPCがたとえば会社のイントラに接続されていて、インターネットにあるXML(たとえばRSSなど)を取得する場合に、プロキシを経由する必要がある場合、どのように設定(あるいはコーディング)すればよろしいのでしょうか? OSはLinux系でもWindows系でもどちらでもかまいません。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- skytemple
- ベストアンサー率62% (5/8)
SimpleXMLを使用することから、PHP5系なのを前提に回答します。 PHP5ではコンテキストがサポートされたので、fopenなどのファイル操作関数でコンテキストオプションが使用できます。 ただし、simplexml_load_fileでコンテキストオプションが使えるのかがマニュアルを見てもよく分からないので、代わりにコンテキストオプション付きでfile_get_contentsでXMLファイルを変数に読み込み、その後simplexml_load_stringでオブジェクトに代入する方法が使えるかと思います。 $proxy_opts = array( 'http' => array( 'proxy' => 'tcp://proxy.example.com:8080', ), ); $proxy_context=stream_context_create($proxy_opts); $xml_string=file_get_contents('http://www.target.com/rss/news.xml', false,$proxy_context); $xml_obj=simplexml_load_string($xml_string); http://jp2.php.net/manual/ja/function.file-get-contents.php http://jp2.php.net/manual/ja/function.stream-context-create.php
お礼
参考になりました、ありがとうございました。もうちょっと自分でも調べてみます。
補足
回答ありがとうございます。 早速Windows用のPHP(Ver5.1.2)で上記のコードを実行してみました。プロキシはローカルプロキシを適当にたてました。ソースでは以下のようにしています。 'proxy' => 'tcp://127.0.0.1:8001', プロキシのログを見ると、HTTPのリクエストが GET /rss/news.xml HTTP/1.0 Host: www.target.com となります。本来、 GET http://www.target.com/rss/news.xml HTTP/1.0 Host: www.target.com にならないとダウンロードできないようです。