2010-12-27 9 views
1

DELETEGETPOSTPUTのリクエストは、cURLのようなサードパーティのライブラリを必要とせずにPHPでリクエストしたいと考えています。第三者のライブラリを使用せずにPHPでHTTPリクエストを行う

チップはありますか?

+0

GETの例は次のように、ただ一つの呼び出しですPHPのためのcURLは、それをサポートするホストでなければなりません。 – Pablo

答えて

4

1つのオプションは使用することですfsockopen()

<?php 
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    $out = "GET/HTTP/1.1\r\n"; 
    $out .= "Host: www.example.com\r\n"; 
    $out .= "Connection: Close\r\n\r\n"; 
    fwrite($fp, $out); 
    while (!feof($fp)) { 
     echo fgets($fp, 128); 
    } 
    fclose($fp); 
} 
?> 
4

標準fopen機能使用している自分がfsockopenを使用してHTTPリクエストを構築するよりも簡単な方法:

$fh = fopen('http://example.com', 'r'); 
while (!feof($fh)) { 
    $content .= fread($fh, 8192); 
} 
fclose($fh); 

あなたは、より多くの複合体を作ることができますがstream_context_createを使用してfopenに引き渡すことができる要求(例:POST):

$querystring = http_build_query(array(
    'name' => 'SomeName', 
    'password' => 'SomePassword' 
)); 
$context = stream_context_create(array(
    'http' => array (
     'method' => 'POST', 
     'content' => $querystring 
    ) 
)); 

$fh = fopen('http://example.com', 'r', false, $context); 
// the request will be a POST 
+0

と思うfile_get_contents()関数でGETを行うことができますし、POST要求のパラメータをクエリ文字列に追加できますか?たとえば、http://example.com/saveUser?name=SomeName&password=SomePassword? – Mark

+0

@Marco編集を参照してください。その他のオプションについては、マニュアルの[HTTPコンテキストオプション](http://www.php.net/manual/en/context.http.php)を参照してください。 – lonesomeday

2

fopenとfsockopenは確かに機能しますが、もう1つのオプションはfile_get_contentsです。 file_get_contentsでは、データの読み方を心配する必要はありません。

$data = file_get_contents($url); 

は、PUTリクエストを発行するように、第三のパラメータにstream_context_createで作成したコンテキストを送信するために:私はそこにある理由、これがあると思い

// Create stream 
$headers = array(
    "http" => array(
    "method" => "PUT" 
) 
); 

$context = stream_context_create($headers); 
$data = file_get_contents($url, false, $context); 
関連する問題