لقد قمنا مؤخرًا بكتابة العديد من البرامج للوصول عن بعد عبر HTTP، ونتواصل بشكل أساسي مع فئة WebHttpRequest في مكتبة فئة .NET والكائن المشترك Microsoft.XMLHTTP، ومن خلال هذه الفئات الملائمة، يمكننا محاكاة الويب من خلال C#. يصل عملاء ASP وJavascript إلى صفحات الويب الأخرى. لكنني أردت اليوم استخدام PHP لتنفيذ وظيفة مماثلة، لكنني لم أتمكن من العثور على الاتجاه لفترة من الوقت، لذلك اضطررت إلى "الحصول على ما يكفي من الطعام والملابس" بنفسي.
في الوقت الحالي، لا توجد فئة مشابهة لـ HttpRequest في PHP، ومع ذلك، وجدت مثل هذه الصفحة من فئة HttpRequest في الوثائق الرسمية عبر الإنترنت، ولكنها ذكرت فقط أن هذه الوظيفة قد تكون موجودة فقط في إصدار CVS...
للتنفيذ لا يعد الوصول إلى HTTP أكثر من مجرد إرسال طلب باستخدام المقبس ثم قراءة معلومات الإرجاع. لذلك كتبت فئة HttpRequest باستخدام المقبس. بالطبع، يمكن تنفيذها أيضًا باستخدام وظيفة fsockopen()، ولكن الفرق بين الاثنين ليس كبيرًا جدًا، فالكود المحدد موجود في المرفق.
<?php/*** الشبكة: كائن طلب HTTP* المؤلف: Li HouYu (Karajan Lee)، شنغهاي، الصين.*/class HttpRequest{var $sHostAdd;var $sUri;var $iPort;var $sRequestHeader;var $sResponse ;وظيفة 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 (فارغ($arMatchUrlPart[3])){$this->iPort = 80;}else{$this-> iPort = $arMatchUrlPart[3];}$this->addRequestHeader('Host: '.$arMatchUrlPart[1]);$this->addRequestHeader('Connection: Close');}وظيفة addRequestHeader($sHeader){$this ->sRequestHeader .= Trim($sHeader)."rn";}الوظيفة 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 .= "Content-Length: ".strlen($sPostData)."rn";$sRequest .= "rn";$sRequest .= $sPostData." rn";}$sRequest .= "rn";$sockHttp = مقبس_إنشاء(AF_INET, SOCK_STREAM, SOL_TCP);if (!$sockHttp){die('socket_create() Failed!');}$resSockHttp = مقبس_اتصال($sockHttp, $this->sHostAdd, $this->iPort);if (!$resSockHttp){die('socket_connect() Failed!');}socket_write($sockHttp, $sRequest, strlen($sRequest ));$this->sResponse = '';while ($sRead =ocket_read($sockHttp, 4096)){$this->sResponse .= $sRead;}socket_ Close($sockHttp);}الوظيفة getResponse(){return $this->sResponse;}function getResponseBody(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[1 ];} الدالة getResponseHead(){$sPatternSeperate = '/rnrn/';$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[0];}} ?>