In letzter Zeit haben wir viele Programme für den HTTP-Fernzugriff geschrieben. Mit diesen praktischen Klassen können wir das Web über C# simulieren. ASP- und Javascript-Clients greifen auf andere Webseiten zu. Aber heute wollte ich PHP verwenden, um eine ähnliche Funktion zu implementieren, aber ich konnte die Richtung eine Zeit lang nicht finden, also musste ich selbst „genug Essen und Kleidung haben“.
Derzeit gibt es in PHP keine ähnliche Klasse wie HttpRequest. Ich habe jedoch eine solche Seite der HttpRequest-Klasse in der offiziellen Online-Dokumentation gefunden, auf der jedoch nur erwähnt wird, dass diese Funktion möglicherweise nur in der CVS-Version vorhanden
ist HTTP-Zugriff ist nichts anderes als das Senden einer Anfrage über Socket und das anschließende Lesen der Rückgabeinformationen. Also habe ich eine HttpRequest-Klasse mit Socket geschrieben. Natürlich kann sie auch mit der Funktion fsockopen() implementiert werden, aber der Unterschied zwischen den beiden ist nicht sehr groß. Schauen Sie sich den spezifischen Code an.
<?php/*** Netzwerk: HTTP-Anforderungsobjekt* Autor: Li HouYu (Karajan Lee), Shanghai, China.*/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 (empty($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('Connection: Close');}function 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 .= "Content-Type: application/x-www-form-urlencoded rn";$sRequest .= "Content-Length: ".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 = '';while ($sRead = socket_read($sockHttp, 4096)){$this->sResponse .= $sRead;}socket_close($sockHttp);}function getResponse(){return $this->sResponse;}function getResponseBody(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[1 ];}function getResponseHead(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[0];}} ?>