この記事では主に、PHP が HTTP リクエストを送信するいくつかの方法を紹介し、cURL を使用する以外に PHP が HTTP リクエストを送信する方法を整理します。興味のある方は詳細をご覧ください。
PHP 開発では、HTTP リクエストをカプセル化するために cURL をよく使用します。 cURL とは何ですか?
cURL はデータを送信するために使用されるツールであり、複数のプロトコルをサポートしています。たとえば、Linux で Curl コマンド ラインを使用すると、さまざまな HTTP リクエストを送信できます。 PHP の cURL は、さまざまなプロトコルに従ってさまざまなサーバーと通信できる低レベルのライブラリであり、HTTP プロトコルもその 1 つです。
パッケージは、GuzzleHttp と呼ばれる最新の PHP 開発フレームワークでよく使用されます。これは HTTP クライアントであり、さまざまな HTTP リクエストの送信にも使用できます。では、その実装原理は何で、cURL とどう違うのでしょうか?
Guzzle には cURL が必要ですか?
いいえ、Guzzle はリクエストを送信するために任意の HTTP ハンドラーを使用できます。つまり、Guzzle は cURL、PHP のストリーム ラッパー、ソケット、および React のような非ブロッキング ライブラリで使用できます。別のリクエスト送信方法を使用するように HTTP ハンドラーを設定します。
これは GuzzleHttp ドキュメント FAQ の質問です。GuzzleHttp は cURL ライブラリに依存していませんが、HTTP リクエストを送信する複数の方法をサポートしていることがわかります。
PHP が HTTP リクエストを送信する方法
それでは、PHP が cURL を使用する以外に HTTP リクエストを送信する方法の概要を示します。
1.cURL
詳細なメソッド: http://www.jb51.net/article/56492.htm
2.streamストリームメソッド
stream_context_create 機能: テキストデータストリームを作成して返すfopen()、file_get_contents()、プロキシサーバー、リクエストメソッド、ヘッダ情報設定などの特殊な処理のタイムアウト設定に使用できるオプションが適用されます。
POSTリクエストを例に挙げます:
PHP
<?php /** * Created by PhpStorm. * User: tanteng * Date: 2017/7/22 * Time: 13:48 */ function post($url, $data) { $postdata = http_build_query( $data ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; }
PHPストリームに関する紹介記事: http://www.jb51.net/article/68891.htm
3.socketメソッド
ソケットを使用して接続を確立し、HTTP メッセージを結合してデータを送信し、HTTP リクエストを行います。
GET メソッドの例:
PHP
<?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); } ?>
この記事では、HTTP リクエストを送信するいくつかの異なる方法を紹介します。
以上がPHP が HTTP リクエストを送信する方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。