เมื่อเร็วๆ นี้ เราได้เขียนโปรแกรมจำนวนมากสำหรับการเข้าถึงระยะไกลด้วย HTTP โดยหลักแล้วเราจะติดต่อกับคลาส WebHttpRequest ในไลบรารีคลาส .NET และออบเจ็กต์ทั่วไป Microsoft.XMLHTTP เราสามารถจำลองเว็บผ่าน C# ได้ ASP และ Javascript ไคลเอนต์เข้าถึงเว็บเพจอื่น ๆ แต่วันนี้ผมอยากใช้ PHP เพื่อใช้งานฟังก์ชั่นที่คล้ายกัน แต่หาทิศทางไม่ได้ซักพัก เลยต้อง "มีอาหารและเสื้อผ้าให้เพียงพอ" ด้วยตัวเอง
ปัจจุบันไม่มีคลาสที่คล้ายกับ HttpRequest ใน PHP อย่างไรก็ตาม ฉันพบหน้าดังกล่าวของ HttpRequest Class ในเอกสารออนไลน์อย่างเป็นทางการ แต่ระบุไว้เพียงว่าฟังก์ชันนี้อาจมีอยู่ในเวอร์ชัน CVS เท่านั้น น่าเสียดาย
... การเข้าถึง HTTP ไม่มีอะไรมากไปกว่าการส่งคำขอโดยใช้ Socket แล้วอ่านข้อมูลที่ส่งคืน ดังนั้นฉันจึงเขียนคลาส HttpRequest โดยใช้ Socket แน่นอนว่ามันสามารถนำไปใช้งานได้โดยใช้ฟังก์ชัน fsockopen() แต่ความแตกต่างระหว่างทั้งสองนั้นไม่ได้ใหญ่มาก โค้ดเฉพาะนั้นอยู่ในไฟล์แนบ ลองดูตัวคุณเอง
<?php/*** เครือข่าย: วัตถุคำขอ HTTP* ผู้แต่ง: Li HouYu (Karajan Lee), เซี่ยงไฮ้, จีน*/class HttpRequest{var $sHostAdd;var $sUri;var $iPort;var $sRequestHeader;var $sResponse ;function HttpRequest($sUrl){$sPatternUrlPart = '/http://([az-.0-9]+)(:(d+)){0,1}(.*)/i' ;$arMatchUrlPart = array();preg_match($sPatternUrlPart, $sUrl, $arMatchUrlPart);$this->sHostAdd = gethostbyname($arMatchUrlPart[1]);if (ว่าง($arMatchUrlPart[4])){$this- >sUri = '/';}else{$this->sUri = $arMatchUrlPart[4];}if (empty($arMatchUrlPart[3])){$this->iPort = 80;}else{$this-> iPort = $arMatchUrlPart[3];}$this->addRequestHeader('Host: '.$arMatchUrlPart[1]);$this->addRequestHeader('การเชื่อมต่อ: ปิด');}ฟังก์ชัน addRequestHeader($sHeader){$this ->sRequestHeader .= trim($sHeader).."rn";}function sendRequest($sMethod = 'GET', $sPostData = ''){$sRequest = $sMethod" ".$this->sUri ." HTTP/1.1rn";$sRequest .= $this->sRequestHeader;if ($sMethod == 'POST'){$sRequest .= "ประเภทเนื้อหา: application/x-www-form-urlencoded rn";$sRequest .= "ความยาวเนื้อหา: ".strlen($sPostData)"rn";$sRequest .= "rn";$sRequest .= $sPostData" rn";}$sRequest .= "rn";$sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);if (!$sockHttp){die('socket_create() failed!');}$resSockHttp = socket_connect($sockHttp, $this->sHostAdd, $this->iPort);if (!$resSockHttp){die('socket_connect() failed!');}socket_write($sockHttp, $sRequest, strlen($sRequest) ));$this->sResponse = '';ในขณะที่ ($sRead = socket_read($sockHttp, 4096)){$this->sResponse .= $sRead;}socket_close($sockHttp);}function getResponse(){return $this->sResponse;}ฟังก์ชัน getResponseBody(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2); ส่งคืน $arMatchResponsePart[1 ];}ฟังก์ชัน getResponseHead(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[0];}} ?>