程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP模擬發送POST請求之三、用Telnet和fsockopen()模擬發送POST信息,telnetfsockopen

PHP模擬發送POST請求之三、用Telnet和fsockopen()模擬發送POST信息,telnetfsockopen

編輯:關於PHP編程

PHP模擬發送POST請求之三、用Telnet和fsockopen()模擬發送POST信息,telnetfsockopen


了解完了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方式。

如果您覺得本文對您有幫助,請您動手點一下推薦,如果有什麼問題,可以在下方留言共同討論,謝謝。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved