Socket编程发送get请求

发送GET请求以及响应信息如下图所示:

本文实现了PHP+Socket实现了发送GET并显示响应结果。

【请求原理】:

1.     连接某URL的80端口打开

2.     发送头信息(写)

3.     读取网页内容

Socket操作远程文件和读取本地文件一样,把本地文件看成硬件传输,远程文件通过网络传输。

【代码实现】:

<span style="font-family:KaiTi_GB2312;font-size:14px;"><?PHP
      /*
      PHP + Socket编程 发送HTTP请求
      */
//http请求类的接口
interface Proto{
      //连接url
      function conn($url);
      //发送get查询
      function get();
      //发送post查询
      function post();
      //关闭连接
      function close();
}
class Httpimplements Proto{
      //定义一个回车换行,在Linux下是'\n'  在windows下是'\r\n'
      //HTTP标准是'\r\n'
      const CRLF = "\r\n";
      protected $errno = -1;
      protected $errstr = '';
      protected $response = '';
      protected $url = null;
      protected $fh = null;
      protected $version = 'HTTP/1.1';
      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->version;
      }
      //此方法负责写头信息
      protected function setHeader($headerline){
           $this -> header[] = $headerline;
      }
      //此方法负责写主体信息
      protected function setBody(){

      }
      //连接url
      public function conn($url){
           $this -> url = parse_url($url);
           //判断端口
           if(!isset($this->url['port'])){
                 $this -> url['port'] = 80;
           }
                 $this -> fh =fsockopen($this -> url['host'],$this -> url['port'],$this ->errno,$this-> errstr,3);

      }
      //构造get请求数据
      public function get(){
           $this -> setLine('GET');
           $this -> request();

      }
      //构造post请求数据
      public function post(){

      }
      //发送GET请求
      public function request(){
           //把请求行,头信息,实体信息放在一个数组里,便于拼接。
           $req = array_merge($this -> line,$this-> header,array(''),$this -> body,array(''));
           $req = implode(self::CRLF,$req);
           // echo $req;
           fwrite($this->fh,$req);
           while(!feof($this->fh)){
                 $this -> response .=fread($this->fh,1024);

           }
           echo $this -> response;
           $this -> close();//关闭连接
      }
      //关闭连接
      public function close(){
      }
}
$url ='http://localhost/test.php';
$http = newHttp($url);
$http -> get();</span>

其中注意的几个问题:

1.在测试时,如果发现提示如下错误:

这是没有设置端口的原因,只需要判断一下端口就可以了。

<span style="font-family:KaiTi_GB2312;font-size:14px;">//判断端口
           if(!isset($this->url['port'])){
                 $this -> url['port'] = 80;
           }
                 $this -> fh =fsockopen($this -> url['host'],$this -> url['port'],$this ->errno,$this-> errstr,3);</span>

【运行结果】:

抓下包:

实现完毕。

时间: 2024-10-28 15:38:31

Socket编程发送get请求的相关文章

socket变成发送GET请求

可以根据几根url地址,分析出主机,地址,协议等,然后用封装成的类拼接成GET请求信息,用fsockopen连接主机,进行读取操作,获取响应信息,打印 <?php //http连接接口 interface proto{ //连接url public function conn($url); //发送get请求 public function get(); //发送post public function post($num); //关闭连接 public function close(); }

Java 通过Socket编程 发送和接收数据

Socket client = null; try{     client = new Socket(Ip,Port);     String msg="发送的数据内容!";     //得到socket读写流,向服务端程序发送数据       client.getOutputStream().write(msg.getBytes());     byte[] datas = new byte[2048];     //从服务端程序接收数据     client.getInputStr

HTTP 笔记与总结(4 )socket 编程:批量发帖

浏览器发送 POST 请求: 表单 form.html <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="a.php" method="post"

Socket编程POST批量发帖

首先本文使用之前的一个留言板案例进行测试,案例连接:使用POST实现对留言板的留言.前面部分是关于步骤原理的讲解,后半部分是继续上一篇文章的代码实现.那么现在开始: 1.     留言页面如下: 先提交一个留言,然后抓包查看POST数据. 看见了这句话: <span style="font-family:KaiTi_GB2312;font-size:14px;">title=vEagleFly&author=vEagleFly&content=vEagleF

PHp + socket编程练习——博客园回复

因为也是学习的路上,先画出思路,代码和看别人的学习的,最后是根据的思路完成的,可能比较简单,后期在去完善和更改 <?php /** * php+socket 编程 发送HTTP请求 * @version c.php * 模拟博客园评论 */ interface Proto{ // 连接url public function conn($url); // 发送get请求 public function get(); // 发送post请求 public function post($body);

HTTP 笔记与总结(3 )socket 编程:发送 GET 请求

使用 PHP + socket 模拟发送 HTTP GET 请求,过程是: ① 打开连接 ② 构造 GET 请求的数据:写入请求行.请求头信息.请求主体信息(GET 请求没有主体信息) ③ 发送 GET 请求 ④ 读取(响应) ⑤ 关闭连接 [例]PHP + socket 编程,发送 GET 请求 <?php /* PHP + socket 编程 @发送 HTTP GET 请求 */ //http 请求类的接口 interface Proto{ //连接 url function conn($u

PHP+Socket模拟发送GET、POST请求

/**  * 使用PHP Socket 编程模拟Http post和get请求  * @author koma  */ class Http{ private $sp = "\r\n"; //这里必须要写成双引号 private $protocol = 'HTTP/1.1'; private $requestLine = ""; private $requestHeader = ""; private $requestBody = "&

使用PHP Socket 编程模拟Http post和get请求

这里给大家分享一段使用PHP Socket 编程模拟Http post和get请求的代码,非常的实用,结尾部分我们再讨论下php模拟http请求的几种方法. <?php /** * 使用PHP Socket 编程模拟Http post和get请求 * @author koma */ class Http{ private $sp = "\r\n"; //这里必须要写成双引号 private $protocol = 'HTTP/1.1'; private $requestLine

PHP + Socket 发送http请求进而实现网站灌水

本质上实现组装http信息的请求行,头信息,主题信息,参考it自学网 cookie信息和http请求头有很大关系,注意把http请求头信息传递到函数里面 01-msg.php <?php require('./http.class.php'); $http = new Http('http://home.verycd.com/cp.php?ac=pm&op=send&touid=0&pmid=0'); $http->setHeader('Accept: text/htm