淺談PHP發(fā)送HTTP請求的幾種方式
PHP 開發(fā)中我們常用 cURL 方式封裝 HTTP 請求,什么是 cURL?
cURL 是一個用來傳輸數(shù)據(jù)的工具,支持多種協(xié)議,如在 Linux 下用 curl 命令行可以發(fā)送各種 HTTP 請求。PHP 的 cURL 是一個底層的庫,它能根據(jù)不同協(xié)議跟各種服務(wù)器通訊,HTTP 協(xié)議是其中一種。
現(xiàn)代化的 PHP 開發(fā)框架中經(jīng)常會用到一個包,叫做 GuzzleHttp,它是一個 HTTP 客戶端,也可以用來發(fā)送各種 HTTP 請求,那么它的實現(xiàn)原理是什么,與 cURL 有何不同呢?
Does Guzzle require cURL?
No. Guzzle can use any HTTP handler to send requests. This means that Guzzle can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries like React. You just need to configure an HTTP handler to use a different method of sending requests.
這是 GuzzleHttp 文檔 FAQ 中的一個 Question,可見 GuzzleHttp 并不依賴 cURL 庫,而支持多種發(fā)送 HTTP 請求的方式。
PHP 發(fā)送 HTTP 請求的方式
那么這里整理一下除了使用 cURL 外 PHP 發(fā)送 HTTP 請求的方式。
1.cURL
詳細方法:http://www.dbjr.com.cn/article/56492.htm
2.stream流的方式
stream_context_create 作用:創(chuàng)建并返回一個文本數(shù)據(jù)流并應(yīng)用各種選項,可用于 fopen(), file_get_contents() 等過程的超時設(shè)置、代理服務(wù)器、請求方式、頭信息設(shè)置的特殊過程。
以一個 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; }
關(guān)于 PHP stream 的介紹文章:http://www.dbjr.com.cn/article/68891.htm
3.socket方式
使用套接字建立連接,拼接 HTTP 報文發(fā)送數(shù)據(jù)進行 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); } ?>
本文介紹了發(fā)送 HTTP 請求的幾種不同的方式。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ThinkPHP6.0如何利用自定義驗證規(guī)則規(guī)范的實現(xiàn)登陸
這篇文章主要介紹了ThinkPHP6.0如何利用自定義驗證規(guī)則規(guī)范的實現(xiàn)登陸,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12ThinkPHP通過AJAX返回JSON的兩種實現(xiàn)方法
這篇文章主要介紹了ThinkPHP通過AJAX返回JSON的兩種實現(xiàn)方法,分析了ThinkPHP中內(nèi)置的ajaxReturn函數(shù)的用法,具有一定的參考借鑒價值,需要的朋友可以參考下2014-12-12Thinkphp5+Redis實現(xiàn)商品秒殺代碼實例講解
這篇文章主要介紹了Thinkphp5+Redis實現(xiàn)商品秒殺代碼實例講解,代碼和步驟講解的很清楚,有需要的同學(xué)可以借鑒參考下2020-12-12ThinkPHP5實現(xiàn)作業(yè)管理系統(tǒng)中處理學(xué)生未交作業(yè)與已交作業(yè)信息的方法
這篇文章主要介紹了ThinkPHP5實現(xiàn)作業(yè)管理系統(tǒng)中處理學(xué)生未交作業(yè)與已交作業(yè)信息的方法,涉及thinkPHP針對數(shù)據(jù)表的查詢與遍歷操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-11-11Yii框架數(shù)據(jù)模型的驗證規(guī)則rules()被執(zhí)行的方法
這篇文章主要介紹了Yii框架數(shù)據(jù)模型的驗證規(guī)則rules()被執(zhí)行的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12php版微信公眾平臺之微信網(wǎng)頁登陸授權(quán)示例
這篇文章主要介紹了php版微信公眾平臺之微信網(wǎng)頁登陸授權(quán)的方法,結(jié)合實例形式分析了微信網(wǎng)頁登陸授權(quán)的接口調(diào)用及參數(shù)含義,需要的朋友可以參考下2016-09-09Laravel如何創(chuàng)建服務(wù)器提供者實例代碼
這篇文章主要給大家介紹了關(guān)于Laravel如何創(chuàng)建服務(wù)器提供者的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04thinkphp5框架實現(xiàn)的自定義擴展類操作示例
這篇文章主要介紹了thinkphp5框架實現(xiàn)的自定義擴展類操作,結(jié)合實例形式簡單分析了thinkPHP5在extend目錄下建立自定義擴展類的具體操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-05-05