了解完了HTTP頭信息和URL信息的具體內容,我們開始嘗試自己動手寫一段頭信息發送到服務器。Windows內置命令Telnet可以幫助我們發送簡單的HTTP請求。
並且TELNET是一個特別靈活的工具,我們還可以用它進行FTP/SMTP/POP3/TCP等方式的簡單請求。
通過開始菜單--運行--CMD命令進入DOS狀態,
我們輸入“Telnet 主機地址 端口(Telnet 192.168.1.99 80)” 來進入telnet命令狀態(完全黑窗口,此時輸出字符會出問題),我們按”ctrl”+”]”,切回普通CMD窗口,再按”ENTER”回車鍵進入編輯命令狀態。
如果系統提示找不到TELNET命令,只需按如下方式可解鎖TELNET命令。
進入TELNET 命令輸入模式後我們就可以直接編輯頭文件來進行發送了
只需要注意:當編輯完請求頭文件後要按兩次回車鍵來發送。
這是一次標准的HTTP請求與響應,是不是跟上節的HTTP文件關聯了。
當然我們不能只用這麼不方便的工具,下面要介紹的是PHP裡的fsockopen()方法。
先來看fsockopen()方法的原型:
resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
它返回一個資源類型的結果,需要傳入的參數分別是:
$hostname:主機名
$port:端口號
$errno:錯誤號(注意原型中的"&"一旦連接有錯誤,錯誤號將會被賦值給$errno)
$errstr:錯誤字符串(一旦連接有錯誤,錯誤信息將會被賦值給$errstr)
$timeout:超時時間
$host=parse_url($url,PHP_URL_HOST);//獲取host數據 $port=parse_url($url,PHP_URL_PORT)==null ? 80 : parse_url($url,PHP_URL_PORT);//獲取端口數據,如果沒有設置則默認為80 $path=parse_url($url,PHP_URL_PATH);//獲取到path信息後面使用 $socket=fsockopen($host,$port,$errno,$errstr,20);//獲取資源類型$socket
這個資源類型就如同Telnet裡我們用telnet 主機名 端口號 命令之後的環境。
那麼接下來,我們就要往這個環境裡寫內容了。
我們可以分次用fwrite()方法寫入頭信息,也可以將頭信息進行拼合一次寫入。
fwrite($socket, "POST ".$path." HTTP/1.1\r\n"); fwrite($socket, "HOST: localhost\r\n\r\n");
或先拼合再寫入的方式:
$str="POST ".$path." HTTP/1.1\r\n"."HOST: localhost\r\n\r\n"; fwrite($socket,$str);
注意:請求行、報頭之間有一次回車鍵,我們用"\r\n"來進行回車輸入,結束輸入時兩用"\r\n\r\n"模擬兩次回車。
接下來我們用fread來讀取響應信息並將其存入$info中:
while (!feof($socket)) { //當還有待讀取內容 $info.= fgets($socket, 4096); //每次讀取4096個字節內容,並用.連接符連接到$info中。 } echo $info;//輸出返回結果。
當然以上是一個特別簡單的例子,我們可以通過拼合更多的報頭信息(加入Accept等)來將它更加完善。
接下來我們會說一些常用的POST方式。
如果您覺得本文對您有幫助,請您動手點一下推薦,如果有什麼問題,可以在下方留言共同討論,謝謝。