2009-06-06 14 views
219

私は単純な要件のためにPHPを使用する予定です。 URLからXML GETリクエストを送信する必要があるXMLコンテンツをダウンロードする必要があります。PHPからGETリクエストを送信するには?

どのようにPHPで行うのですか?

答えて

294

、あなたはfile_get_contentsを使用することができます。

$xml = file_get_contents("http://www.example.com/file.xml"); 

より複雑なもののために、私はcURLを使用すると思います。

より高度なGET/POSTリクエストの場合
+3

クエリ文字列パラメータを使用する必要がない限り、これは正しいです。 – Raptor

+1

@musicfreak:セキュリティ設定のために、一部のサーバーでクエリ文字列が無視されることがあります。また、クロスサーバクエリでこのエラーが発生する可能性があります: 'ストリームを開くことに失敗しました:HTTP要求が失敗しました! ' – Raptor

+25

@ShivanRaptor:あなたが何を話しているのか分かりません...クエリ文字列は文字列の一部です。サーバーがそれを無視する理由はありません。さて、明らかに、 'file_get_contents'は、カスタムのクッキー、ヘッダー、およびブラウザが通常送信する他のものでリクエストを行うことはできませんので、探しているレスポンスが得られない可能性があります。その場合は、とにかくCURLを使用する方がよいでしょう。 (しかしOPの場合はそうではありません) –

55

http_getこのトリックを行う必要があります。 http_getの利点は、file_get_contentsを超え、HTTPヘッダーを表示したり、アクセス要求の詳細を表示したり、接続タイムアウトを制御することができます。あなたは、ファイルの内容だけよりも多くを必要としない限り

$response = http_get("http://www.example.com/file.xml"); 
+75

HTTP拡張モジュールはPHPにバンドルされていませんし、共有ホストで頻繁に利用できていませんが。 – Imran

+25

これはpecl_http> = 0.1.0を必要としますが、これはデフォルトではインストールされません。 – Raptor

111

、あなたはCURLライブラリ(http://us3.php.net/curl)をインストールすることができます。

$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 
+10

「単純な要件」のためにCURLを使用する必要はありませんが、+1なぜなら、これはPHPでHTTPリクエストを使ってさらに高度な処理を行うための最良のソリューションだからです。 – xyz

+0

すでに述べたように、curlは 'file_get_contents()'よりはるかに高速です。シンプルな4文字の文字列には約10秒かかっていましたが、カールは1秒以下でより合理的でした。 –

+0

@pgmannあなたはその結果で確信していますか?これは、引用されているものと他の統計情報とは一致しません。確かにCURLは高速ですが、はるかに速くすべきではありません。おそらくこの応答時間の低下は、サーバー側のリソースなどのキャッシュによって引き起こされたのだろうか?テストをやり直すべきでしょうか? –

8

PHPの設定は、URLを上のfopenことができますかどうかに応じて、あなたは可能性があり、単にGETとURLのfopen (例えばhttp://example.com?variable=valueなど)、文字列内の引数

編集:再読み込み、私はあなたが変数を渡すために探したりしていないかどうかかどうか分からない質問 - あなたがいないのであればあなたは、単にhttp://example.com/filename.xmlをcontaing fopenの要求を送信することができますが - 変数=値の部分を自由に無視してください

5

私はこのためにfsockopenを開いて使うのが好きです。

17

あなたがあなたのPHPコードに少しトリックを行う必要があり、プロキシを使用している場合があることに注意してください:他のサーバのREST APIを使用して、一方では

(PROXY WITHOUT AUTENTICATION EXAMPLE) 

<?php 
$aContext = array(
    'http' => array(
     'proxy' => 'proxy:8080', 
     'request_fulluri' => true, 
    ), 
); 
$cxContext = stream_context_create($aContext); 

$sFile = file_get_contents("http://www.google.com", False, $cxContext); 

echo $sFile; 
?> 
2

はPHPで非常に人気があります。いくつかのHTTP要求を別のサーバーにリダイレクトする方法(たとえば、xmlファイルを取得する方法)を探しているとします。ここであなたを助けるためにPHPパッケージは次のとおりです。

https://github.com/romanpitak/PHP-REST-Client 

ので、xmlファイルの取得:

$client = new Client('http://example.com'); 
$request = $client->newRequest('/filename.xml'); 
$response = $request->getResponse(); 
echo $response->getParsedResponse();