Baru-baru ini, kami telah menulis banyak program untuk akses jarak jauh HTTP. Kami terutama berhubungan dengan kelas WebHttpRequest di perpustakaan kelas .NET dan objek umum Microsoft.XMLHTTP. Dengan kelas yang nyaman ini, kami dapat mensimulasikan Web melalui C#, ASP, dan Javascript Klien mengakses halaman Web lainnya. Tapi hari ini saya ingin menggunakan PHP untuk mengimplementasikan fungsi serupa, tapi saya tidak bisa menemukan arahnya untuk sementara waktu, jadi saya harus "memiliki cukup makanan dan pakaian" sendiri.
Saat ini, tidak ada kelas yang mirip dengan HttpRequest di PHP. Namun, saya menemukan halaman Kelas HttpRequest di dokumentasi online resmi, tetapi hanya disebutkan bahwa fungsi ini mungkin hanya ada di versi
CVS Akses HTTP tidak lebih dari mengirimkan permintaan menggunakan Socket dan kemudian membaca informasi pengembalian. Jadi saya menulis kelas HttpRequest menggunakan Socket. Tentu saja, ini juga dapat diimplementasikan menggunakan fungsi fsockopen(), tetapi perbedaan antara keduanya tidak terlalu besar. Kode spesifiknya ada di lampiran.
<?php/*** Jaringan: objek permintaan HTTP* Penulis: Li HouYu (Karajan Lee), Shanghai, Tiongkok.*/class HttpRequest{var $sHostAdd;var $sUri;var $iPort;var $sRequestHeader;var $sResponse ;fungsi HttpRequest($sUrl){$sPatternUrlPart = '/http://([az-.0-9]+)(:(d+)){0,1}(.*)/i' ;$arMatchUrlPart = array();preg_match($sPatternUrlPart, $sUrl, $arMatchUrlPart);$this->sHostAdd = gethostbyname($arMatchUrlPart[1]);if (kosong($arMatchUrlPart[4])){$this- >sUri = '/';}else{$this->sUri = $arMatchUrlPart[4];}if (kosong($arMatchUrlPart[3])){$this->iPort = 80;}else{$this-> iPort = $arMatchUrlPart[3];}$this->addRequestHeader('Host: '.$arMatchUrlPart[1]);$this->addRequestHeader('Connection: Close');}fungsi addRequestHeader($sHeader){$this ->sRequestHeader .= trim($sHeader)."rn";}fungsi sendRequest($sMethod = 'GET', $sPostData = ''){$sRequest = $sMethod." ".$this->sUri ." HTTP/1.1rn";$sRequest .= $this->sRequestHeader;if ($sMethod == 'POST'){$sRequest .= "Tipe Konten: application/x-www-form-urlencoded rn";$sRequest .= "Panjang Konten: ".strlen($sPostData)."rn";$sRequest .= "rn";$sRequest .= $sPostData." rn";}$sRequest .= "rn";$sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);if (!$sockHttp){die('socket_create() gagal!');}$resSockHttp = socket_connect($sockHttp, $this->sHostAdd, $this->iPort);if (!$resSockHttp){die('socket_connect() gagal!');}socket_write($sockHttp, $sRequest, strlen($sRequest ));$ini->sResponse = '';sementara ($sRead = socket_read($sockHttp, 4096)){$ini->sResponse .= $sRead;}socket_close($sockHttp);}fungsi getResponse(){return $this->sResponse;}fungsi getResponseBody(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[1 ];}fungsi getResponseHead(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[0];}} ?>