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();
}
class Http implements proto{
    const CRLF="\r\n";
    protected $response=‘‘;
    protected $poststr=‘‘;
    protected $errno=-1;
    protected $errstr=‘‘;
    protected $version=‘HTTP/1.1‘;
    protected $fh=null;
    protected $url=array();
    protected $line=array();
    protected $header=array();
    protected $body=array();

    public function __construct($url){
        $this->conn($url);
        $this->setheader();
    }
    //负责写请求行
    protected function setLine($method){
        $this->line[0]=$method .‘ ‘.$this->url[‘path‘] .‘ ‘.$this->version;
    }
    //负责写请求信息
    protected function setHeader(){
        $this->header[]=‘Host:‘.$this->url[‘host‘];
    }
    //负责写主题信息
    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();
        return $this->response;
    }
    //构造post请求数据
    public function post($num){
        $this->setLine(‘POST‘);
        $this->header[]=‘content-length:‘.$num;
        $this->header[]=‘content-type:application/x-www-form-urlencoded‘;
        // print_r($this->header);
    }
    //添加postti提交的信息
    public function postStr($str){
        $this->poststr=$str;
    }
    //真正的请求
    public function request(){
        $req=array_merge($this->line,$this->header,array(‘‘),$this->body,array(‘‘));//拼接请求信息为数组
        // print_r($req);
        $req=implode(self::CRLF,$req);
        // echo $req;
        fwrite($this->fh,$req);

        while(!feof($this->fh)){
            $this->response.=fread($this->fh,1024);
        }
        $this->close();

    }
    //关闭连接
    public function close(){
        fclose($this->fh);
    }

}

//调试
$url=‘http://bbs.chinaunix.net/zhuanti/1041/httpyoujizhongqingqiu_1041558.shtml‘;
$http=new Http($url);
echo $http->get();
// print_r($http);

?>
时间: 2024-10-12 03:43:15

socket变成发送GET请求的相关文章

Socket编程发送get请求

发送GET请求以及响应信息如下图所示: 本文实现了PHP+Socket实现了发送GET并显示响应结果. [请求原理]: 1.     连接某URL的80端口打开 2.     发送头信息(写) 3.     读取网页内容 Socket操作远程文件和读取本地文件一样,把本地文件看成硬件传输,远程文件通过网络传输. [代码实现]: <span style="font-family:KaiTi_GB2312;font-size:14px;"><?PHP /* PHP + S

socket发送http请求

转自:思齐-socket发送http请求 socket方式: $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec"=>20, "usec"=>0)); socket_connect($socket, 'www.baidu.com', 80); //里面的换行代表 \r

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 = "&

Nodejs发送Post请求时出现socket hang up错误的解决办法

参考nodejs官网发送http post请求的方法,实现了一个模拟post提交的功能.实际使用时报socket hang up错误. 后来发现是请求头设置的问题,发送选项中需要加上headers字段信息(这个估计也和对方的服务器有关,对于不完成的post请求头,可能被丢弃了). 完整的代码如下(遇到类型问题的同学可以做个参考): var querystring = require('querystring') , http = require('http'); var data = query

c/c++ socket发送http请求访问网站

这几天课比较少,校园网上网要认证才能上网,每次必须输入学号密码,为了方便,写了一个自动登录以及如果在线,登录自服务系统强制下线的小工具. 强制下线思路:获取sessionID---------->获取验证码图片------------>AspriseOCRLib识别验证码--------------->MD5加密.url Encode---------------->登录自服务系统---------------->强制下线--------------------->退出

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

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

使用socket发送http请求(GET/POST)

使用socket发送http请求(GET/POST) 下载LOFTER客户端 1.socket的原理 在相关文章中已经提及,不再赘述. 2.http头的格式 (1)请求行请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.例如,GET /index.html HTTP/1.1.HTTP协议的请求方法有GET.POST.HEAD.PUT.DELETE.OPTIONS.TRACE.CONNECT.这里介绍最常用的GET方法和POST方法.GET:当客户端要从服务器中读

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比 在项目中需要使用http调用接口,实现了两套发送http请求的方法,一个是使用apache的httpclient提供的http链接池来发送http请求,另一个是使用java原生的HttpURLConnection来发送http请求,并对两者性能进行了对比. 使用httpclient中的链接池发送http请求 使用最新的4.5.2版httpclient进行实现.在maven中引入 <