用PHP的Socket實現HTTP請求_PHP教程

來源:互聯網
上載者:User

最近HTTP遠端存取的程式寫得多了,主要接觸的是.NET類庫裡的WebHttpRequest類和 Microsoft.XMLHTTP這個通用的對象,有了這些方便的類,我們可以通過C#,ASP,Javascript來類比Web用戶端訪問其他的 Web頁面。但是今天想用PHP實現一下類似的功能,卻一時找不到方向了,於是只能自己“豐衣足食”了。

目前,PHP裡面還沒有類似於HttpRequest的類,不過在官方線上文檔中找到了這麼一個HttpRequest Class的頁面,不過也只是提及了此功能目前可能只有在CVS版本中存在,無奈...

要實現HTTP訪問無非就是用Socket發送一個請求,然後讀取返回資訊。於是我就用Socket寫了一個HttpRequest的類,當然也可以用fsockopen()這個函數來實現,不過兩個的區別不是很大,具體代碼在附件裡,自己看咯。

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)."";}function sendRequest($sMethod = GET, $sPostData = ){$sRequest = $sMethod." ".$this->sUri." HTTP/1.1";$sRequest .= $this->sRequestHeader;if ($sMethod == POST){$sRequest .= "Content-Type: application/x-www-form-urlencoded";$sRequest .= "Content-Length: ".strlen($sPostData)."";$sRequest .= "";$sRequest .= $sPostData."";}$sRequest .= "";$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 = //;$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[1];}function getResponseHead(){$sPatternSeperate = //;$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);return $arMatchResponsePart[0];}}?>

http://www.bkjia.com/PHPjc/508281.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/508281.htmlTechArticle最近HTTP遠端存取的程式寫得多了,主要接觸的是.NET類庫裡的WebHttpRequest類和 Microsoft.XMLHTTP這個通用的對象,有了這些方便的類,我們可以通...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.