php 利用socket發送GET,POST請求的實例代碼_php實例

來源:腳本之家  責任編輯:小易  

socket系列函數大多有一個公用參數,它代表與單個用戶的連接。你可以通過 socket_write($sock,$content)向用戶發送內容,socket_read($sock)接受用戶發來的內容。上面的$sock就是這個公用參數,可以說它代表了一個用戶www.anxorj.tw防采集請勿采集本網。

  作為php程序員一定會接觸http協議,也只有深入了解http協議,編程水平才會更進一步。最近我一直在學習php的關于http的編程,許多東西恍然大悟,受益匪淺。希望分享給大家。本文需要有一定http基礎的開發者閱讀。

Sockets在PHP中是沒有充分利用的功能。今天你將看到產生一個能使用客戶端連接的服務器,并在客戶端使用socket進行連接,服務器端將詳細的處理信息發送給客戶端。當你看到完整的socket過程,那么

  今天給大家帶來的是如何利用socket發送GET,POST請求。我借用燕十八老師封裝好的一個Http類給進行說明。

需要了解一下發送郵件的協議 如 smtp,emstp 是如何會話的,郵件格式,和郵件編碼規則 當然最好還是要了解一下 socket 通信,若這些都知道的話,那剩下編碼應不是問題了 郵件編碼和格式可以參考

  在日常編程中相信很多人和我一樣大部分時間是利用瀏覽器向服務器提出GET,POST請求,那么可否利用其它方式提出GET,POST請求呢?答案必然是肯定的。了解過HTTP協議的人知道,瀏覽器提交請求的實質是向服務器發送一個請求信息,這個請求信息有請求行,請求頭,請求體(非必須)構成。服務器根據請求信息返回一個響應信息。連接斷開。

Socket s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);try { 嘗試連接主機. s.Connect(ephost);Console.WriteLine(\"向服務器發送到了:{0}\",SEND_MESSAGE);向主機發送數據

   HTTP請求的格式如下所示:

向客戶端發送信息的DataOutputStream DataOutputStream out=new DataOutputStream(socket getOutputStream());獲取控制臺輸入的Scanner Scanner scanner=new Scanner(System.in);while(true){ 讀取來自

<request-line> <headers> <blank line> [<request-body>]

select函數應該是針對你在參數表中列出的事件進行選擇性處理的,比如,機器會自動監聽,當發現有列表中的事件發生時,就會調用相應的操作,不過,調用什么操作也要事先定義。

  HTTP響應的格式與請求的格式十分相似:

<status-line><headers><blank line>[<response-body>]

  我們可以利用HTTP發送請求的原理,可以重新考慮利用socket發送HTTP請求。

  Socket的英文原義是“孔”或“插座”。通常也稱作“套接字”,用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,并綁定到一個端口上,不同的端口對應于不同的服務。如此看來,其實利用socket操作遠程文件和讀寫本地的文件一樣容易,把本地文件看成通過硬件傳輸,遠程文件通過網線傳輸就行了。

  因而可以將發送請求的考慮成 建立連接->打開socket接口(fsockopen())->寫入請求(fwrite())->讀出響應(fread()->關閉文件(fclose())。話不多說,直接上代碼:

<?php interface Proto { // 連接url function conn($url); //發送get查詢 function get(); // 發送post查詢 function post(); // 關閉連接 function close();}class Http implements Proto { const CRLF = "\r\n"; protected $errno = -1; protected $errstr = ''; protected $response = ''; protected $url = null; protected $version = 'HTTP/1.1'; protected $fh = null; protected $line = array(); protected $header = array(); protected $body = array(); public function __construct($url) { $this->conn($url); $this->setHeader('Host: ' . $this->url['host']); } // 此方法負責寫請求行 protected function setLine($method) { $this->line[0] = $method . ' ' . $this->url['path'] . '?' .$this->url['query'] . ' '. $this->version; } // 此方法負責寫頭信息 public function setHeader($headerline) { $this->header[] = $headerline; } // 此方法負責寫主體信息 protected function setBody($body) { $this->body[] = http_build_query($body); } // 連接url public function conn($url) { $this->url = parse_url($url); // 判斷端口 if(!isset($this->url['port'])) { $this->url['port'] = 80; } // 判斷query if(!isset($this->url['query'])) { $this->url['query'] = ''; } $this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errstr,3); } //構造get請求的數據 public function get() { $this->setLine('GET'); $this->request(); return $this->response; } // 構造post查詢的數據 public function post($body = array()) { $this->setLine('POST'); // 設計content-type $this->setHeader('Content-type: application/x-www-form-urlencoded'); // 設計主體信息,比GET不一樣的地方 $this->setBody($body); // 計算content-length $this->setHeader('Content-length: ' . strlen($this->body[0])); $this->request(); return $this->response; } // 真正請求 public function request() { // 把請求行,頭信息,實體信息 放在一個數組里,便于拼接 $req = array_merge($this->line,$this->header,array(''),$this->body,array('')); //print_r($req); $req = implode(self::CRLF,$req); //echo $req; exit; fwrite($this->fh,$req); while(!feof($this->fh)) { $this->response .= fread($this->fh,1024); } $this->close(); // 關閉連接 } // 關閉連接 public function close() { fclose($this->fh); }}

      利用此類發送一個簡單的GET請求:

<?php//記得引用Http類$url="http://home.cnblogs.com/u/DeanChopper/";$http=new Http($url);$response=$http->get();print_r($response);

  返回值為信息,可以對響應信息進行進一步處理,得到自己想得到的內容。

以上就是php 利用socket發送GET,POST請求的實例代碼的詳細內容,更多關于php 發送GET,POST請求的資料請關注真格學網其它相關文章!

1.參考資料socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個包含socket的資源類型,如果沒有成功則返回false。Socket函數函數名 描述函數名 描述socket_accept()接受一個Socket連接socket_bind()把socket綁定在一個IP地址和端口上socket_clear_error()清除socket的錯誤或最后的錯誤代碼socket_close()關閉一個socket資源socket_connect()開始一個socket連接socket_create_listen()在指定端口打開一個socket監聽socket_create_pair()產生一對沒有差別的socket到一個數組里socket_create()產生一個socket,相當于產生一個socket的數據結構socket_get_option()獲取socket選項socket_getpeername()獲取遠程類似主機的ip地址socket_getsockname()獲取本地socket的ip地址socket_iovec_add()添加一個新的向量到一個分散/聚合的數組socket_iovec_alloc()這個函數創建一個能夠發送接收讀寫的iovec數據結構socket_iovec_delete()刪除一個已分配的iovecsocket_iovec_fetch()返回指定的iovec資源的數據socket_iovec_free()釋放一個iovec資源socket_iovec_set()設置iovec的數據新值socket_last_error()獲取當前socket的最后錯誤代碼socket_listen()監聽由指定socket的所有連接socket_read()讀取指定長度的數據socket_readv()讀取從分散/聚合數組過來的數據socket_recv()從socket里結束數據到緩存socket_recvfrom()接受數據從指定的socket,如果沒有指定則默認當前socketsocket_recvmsg()從iovec里接受消息socket_select()多路選擇socket_send()這個函數發送數據到已連接的socketsocket_sendmsg()發送消息到socketsocket_sendto()發送消息到指定地址的socketsocket_set_block()在socket里設置為塊模式socket_set_nonblock()socket里設置為非塊模式socket_set_option()設置socket選項socket_shutdown()這個函數允許你關閉讀、寫、或指定的socketsocket_strerror()返回指定錯誤號的周詳錯誤socket_write()寫數據到socket緩存socket_writev()寫數據到分散/聚合數組2.代碼:phpsendStr='30 32 30 34 03 30 33';16進制數據sendStrArray=str_split(str_replace(' ','',$sendStr),2);將16進制數據轉換成兩個一組的數組socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname("tcp"));創建Socketif(socket_connect($socket,"192.168.1.100",8080)){/連接for($j=0;j($sendStrArray);j+){socket_write($socket,chr(hexdec($sendStrArray[$j])));逐組數據發送}receiveStr=";receiveStr=socket_read($socket,1024,PHP_BINARY_READ);采用2進制方式接收數據receiveStrHex=bin2hex($receiveStr);將2進制數據轉換成16進制echo"client:".$receiveStrHex;}socket_close($socket);關閉Socket內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • php自定義類fsocket模擬post或get請求的方法
  • 使用php socket 編程模擬http post和get請求
  • php請求socket接口測試實例
  • php socket 模擬post 請求實例代碼
  • php使用socket發送http請求的方法
  • wamp下修改mysql訪問密碼的解決方法
  • php實現即時輸出、實時輸出內容方法
  • thinkphp3.1新特性之字段合法性檢測詳解
  • yii使用技巧大匯總
  • codeigniter中mkdir創建目錄遇到權限問題和解決方法
  • php網頁游戲學習之xnova(ogame)源碼解讀(十四)
  • php微信開發之谷歌測距
  • php將html轉為圖片的實現方法
  • php中的表達式簡述
  • php編寫學校網站上新生注冊登陸程序的實例分享
  • 請教php大神,php如何實現點擊頁面上的一個按鈕發送socket的tcp數據
  • php socket同時給不同用用戶發消息怎么做?
  • php socket 發送來的數據 怎么接收
  • php模擬socket一次連接,多次發送數據的如何實現代碼
  • php的socket編程在項目中用的多嗎
  • PHP如何使用socket發送郵件,知識要點是什么?
  • 如何在PHP中使用socket+XML發送數據包
  • java socket 和php 怎樣實現聊天功能,求幫忙
  • php socket 如何實現非阻塞
  • 請教Socket編程 php 與 java 通信的問題
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全php基礎php技巧php實例php文摘php模板首頁php編程php自定義類fsocket模擬post或get請求的方法使用php socket 編程模擬http post和get請求php請求socket接口測試實例php socket 模擬post 請求實例代碼php使用socket發送http請求的方法wamp下修改mysql訪問密碼的解決方法php實現即時輸出、實時輸出內容方法thinkphp3.1新特性之字段合法性檢測詳解yii使用技巧大匯總codeigniter中mkdir創建目錄遇到權限問題和解決方法php網頁游戲學習之xnova(ogame)源碼解讀(十四)php微信開發之谷歌測距php將html轉為圖片的實現方法php中的表達式簡述php編寫學校網站上新生注冊登陸程序的實例分享php獲取數組長度的方法(有實例)微信公眾平臺實現獲取用戶openid教你如何使用php session使用php生成二維碼的兩種方法(帶php發送get、post請求的6種方法簡php中把stdclass object轉array的微信公眾平臺網頁授權獲取用戶基laravel框架數據庫curd操作、連貫php刪除數組中空值的方法介紹php從數組中刪除元素的四種方法實php stream_context_create()函數的使用示詳解 php加密解密字符串函數附源碼下載php插入mysql數據返回id的方法php封裝的mongodb操作類代碼yii視圖cgridview列表用法實例分析thinkphp之用戶注冊登錄留言完整實例基于opencart 開發支付寶,財付通,微信支微信自定義分享php代碼分析discuz免激活同步登入代碼修改方法(discu關于yii2框架跑腳本時內存泄漏問題的分析
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载