当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用socket发送HTTP请求的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-09 15:07:55 浏览: 评论:0 

这篇文章主要介绍了PHP使用socket发送HTTP请求的方法,结合实例形式分析了PHP使用socket发送http请求的常用技巧,需要的朋友可以参考下。

本文实例讲述了PHP使用socket发送HTTP请求的方法,分享给大家供大家参考,具体如下:

socket方式:

  1. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
  2. //socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec"=>20, "usec"=>0)); 
  3. socket_connect($socket'www.phpfensi.com', 80); 
  4. //里面的换行代表 \r\n 注意拷贝的代码后面可能有空格 
  5. $http = <<<eof 
  6. GET / HTTP/1.0 
  7. Accept: */* 
  8. User-Agent: Lowell-Agent 
  9. Host: www.phpfensi.com 
  10. Connection: Close 
  11. eof; 
  12. socket_write($socket$httpstrlen($http)); 
  13. while($str = socket_read($socket, 1024)) 
  14.   echo $str
  15. socket_close($socket); 

fsockopen方式:

  1. $fp = fsockopen("www.phpfensi.com", 80, $errno$errstr, 30); 
  2. if (!$fp) { 
  3.   echo "$errstr ($errno)<br />\n"
  4. else { 
  5.   $out = "GET / HTTP/1.1\r\n"
  6.   $out .= "Host: www.phpfensi.com\r\n"
  7.   $out .= "Connection: Close\r\n\r\n"
  8.   fwrite($fp$http); 
  9.   while (!feof($fp)) { 
  10.     echo fgets($fp, 128); 
  11.   } 
  12.   fclose($fp); 

原始socket方式:

  1. $fp = stream_socket_client("tcp://www.phpfensi.com:80"$errno$errstr, 30); 
  2. if (!$fp) { 
  3.   echo "$errstr ($errno)<br />\n"
  4. else { 
  5.   $http = <<<eof 
  6. GET / HTTP/1.0 
  7. Accept: */* 
  8. User-Agent: Lowell-Agent 
  9. Host: www.phpfensi.com 
  10. Connection: Close 
  11. eof; 
  12.   fwrite($fp$http); 
  13.   while (!feof($fp)) { 
  14.     echo fgets($fp, 1024); 
  15.   } 
  16.   fclose($fp); 

stream  方式(get):

  1. $http = <<<eof 
  2. Host: www.phpfensi.com 
  3. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
  5. Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 
  6. Cookie: BAIDUID=79D98B1AD8436C57B967E111E484F1CD:FG=1; BDUSS=lF-UFFOanFPVG92NmF4U3NiTEoxOFh4YVBCTnZaMUtoTUNhZmxrWThwN25IaUJVQVFBQUFBJCQAAAAAAAAAAAEAAADzo1gKc2lxaW5pYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeR-FPnkfhTU; BAIDUPSID=79D98B1AD8436C57B967E111E484F1CD; BD_UPN=13314352; BD_HOME=1; H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618; sug=3; sugstore=0; ORIGIN=2; bdime=0 
  7. Connection: keep-alive 
  8. Cache-Control: max-age=0 
  9. eof; 
  10. $hdrs = array
  11.     'http' =>array
  12.         'header' => $http
  13.         'timeout'=>1, //超时 秒 
  14.         'method' => 'GET'//默认方式 
  15.          'protocol_version' => '1.1'//默认为 1.0 
  16.     ), 
  17. ); 
  18. //参数格式参考 http://php.net/manual/zh/context.http.php 
  19. //curl方式的格式可以参考; http://php.net/manual/zh/context.curl.php 
  20. $context = stream_context_create($hdrs); 
  21. echo file_get_contents('http://www.phpfensi.com', 0, $context); 

stream  方式 post:

  1. $postdata = http_build_query(array('act'=>'save''id'=>387171)); 
  2. $http = <<<eof 
  3. Host: www.phpfensi.com 
  4. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
  6. Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 
  7. Content-Type: application/x-www-form-urlencoded; charset=UTF-8  
  8. Cookie: BAIDUID=79D98B1AD8436C57B967E111E484F1CD:FG=1; BDUSS=lF-UFFOanFPVG92NmF4U3NiTEoxOFh4YVBCTnZaMUtoTUNhZmxrWThwN25IaUJVQVFBQUFBJCQAAAAAAAAAAAEAAADzo1gKc2lxaW5pYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeR-FPnkfhTU; BAIDUPSID=79D98B1AD8436C57B967E111E484F1CD; BD_UPN=13314352; BD_HOME=1; H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618; sug=3; sugstore=0; ORIGIN=2; bdime=0 
  9. Connection: keep-alive 
  10. Cache-Control: max-age=0 
  11. eof; 
  12. #注意post方式需要增加Content-Type 
  13. $hdrs = array
  14.     'http' =>array
  15.         'header' => $http
  16.         'timeout'=>1, //超时 秒 
  17.         'method' => 'POST'
  18.         'content' => $postdata
  19.          'protocol_version' => '1.1'//默认为 1.0 
  20.     ), 
  21. ); 
  22. //参数格式参考 http://php.net/manual/zh/context.http.php 
  23. //curl方式的格式可以参考; http://php.net/manual/zh/context.curl.php 
  24. $context = stream_context_create($hdrs); 
  25. echo file_get_contents('http://test.cm/song.php', 0, $context); 

注意:http1.1 中必须包含 Host 头, 而 http1.0中则可以没有

Tags: socket发送HTTP

分享到: