建議先看一下如何用telnet傳送http請求:
/***此方法負責寫請求行
*如 get /index.php http/1.1
*/private function setline($method)
/***此方法負責寫頭資訊
*如host: localhost
*/public function setheader($key,$value)
/***此方法負責寫post主體資訊
*key=value的形式寫進陣列
*用http_build_query()封裝成key1=value1&key2=value2
*/public function setbody($key,$value)
/***用fsockopen開啟網路連線
*就像telnet 192.168.0.0 80
*/private function conn($url)
//如果url沒有path,則預設根路徑'/'
//如www.baidu.com沒有path
//如為/sports
if(!isset($this->url['path']))
if(!isset($this->url['query']))else
//開啟網路連線
$this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errstr,3);
if(!$this->fh)
}public function get()
public function post()
/***拼接請求資訊,並寫入response
*/private function request()
$this->close();
}/**
*關閉socket連線
*/public function close()
}//get請求
//post請求
// $http->setbody('submit','提交');
?>為什麼要在頭資訊設定connection:close
如果不設定connection:close,會發現速度非常慢,feof不能準確判斷是否已經得到了所有的資料,直到超過設定的超時時間才結束。
connection的狀態有兩種,一種是keep-alive 另外一種就是close。
keep-alive就是保持客戶端與伺服器的連線,這是預設的方式。
close表示伺服器給客戶端傳送資訊之後就斷開了,.close對資源消耗占用的少一些。
再完善一點,其實這和tcp三次握手有關,如果返回的是keep-alive表示之前的握手還可以用在接下來的請求當中去,如果是close的話當前請求完成後會進行四次握手關閉連線,在接下來的請求就要重新握手,這是http/1.1相對1.0新增的乙個部分,加快了網路傳輸。
->setheader('cookie','***x');//自己的cookie
->setbody('pmsubmit_btn','傳送');
利用fsockopen模擬HTTP傳送請求
首先檢查php.ini 中 allow url fopen 選項是否開啟,需要開啟 get 方式傳送請求 fp fsockopen localhost 80,errno,errstr,10 host 埠 錯誤碼 錯誤訊息 超時時間 請求行 http get http server.php?use 1...
springBoot自帶的傳送HTTP請求的API
springboot管理的專案,自動傳送http請乙個自動網頁獲取鏈結,首先考慮到用httpclient api,經同事指點用了springboot自帶的api,非常簡潔,兩行 如下。resttemplate resttemplate new resttemplate string forobjec...
使用requests傳送get post請求
首先是安裝requests庫 pip install requests 匯入requests庫 import requests 定義乙個url 入參直接寫在url內,使用問號隔開 url test 返回的資料定義為r url賦值為之前定義的值 r requests.get url url test ...