PHP中只发起请求不接受响应,用途:上报

原创 2016年06月20日 15:54:56

只要用于只需要发起请求,不需要接收响应值的,因为接收响应值浪费大量时间

$url = 'http://tencentlog.com/stat/report.php';
$post_data = array();
$this->http_request($url,'POST',$post_data);
    //发起http请求之后立即关闭访问信息
    function http_get_host_ip($hostname){
		if($hostname == 'tencentlog.com'){
			return '183.61.46.160';
		}else if($hostname == 'union.tencentlog.com'){
		
			return '140.206.160.173';
		}
        return gethostbyname($hostname);
    }
    
    /**
     * http 请求   - mayer
     *
     * @param String $url
     * @param String $type  GET or POST
     * @param Array $post_data
     * @return false or String
     */
    function http_request($url, $type = "GET", $post_data = NULL)
    {
    	$type = strtoupper($type);
        $http_info = array();
        $url2 = parse_url($url);
        if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0){
            return false;
        }
        //set socket timeout
        socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO,    array("sec"=>1, "usec"=>0));
        $url2["path"] = ($url2["path"] == "" ? "/" : $url2["path"]);    $url2["port"] = ($url2["port"] == "" ? 80 : $url2["port"]);
        $host_ip = $this->http_get_host_ip($url2["host"]);
        if(($result = socket_connect($socket, $host_ip, $url2["port"])) < 0){
            socket_close($socket);
            return false;
        }
        $request =  $url2["path"] . ($url2["query"] != "" ? "?" . $url2["query"] : "") . ($url2["fragment"] != "" ? "#" . $url2["fragment"] : "");
        switch ($type){
            case 'GET':
                $in = "GET " . $request . " HTTP/1.1\r\n";
                $in .= "Accept: */*\r\n";
                $in .= "User-Agent: Lowell-Agent\r\n";
                $in .= "Host: " . $url2["host"] . "\r\n";
                $in .= "Connection: Close\r\n\r\n";
                if(!socket_write($socket, $in, strlen($in))){
                    socket_close($socket);
                    return false;
                }
                socket_close($socket);
                unset($in);
				//logger('send1.txt', $request.'___'.$url2["host"] );
                return true;
            break;
            case 'POST':

                //build post data
                $needChar = false;
                $post_data2 = '';
                foreach($post_data as $key => $val){
                    $post_data2 .= ($needChar ? "&" : "") . urlencode($key) . "=" . urlencode($val);
                    $needChar = true;
                }
                $in = "POST " . $request . " HTTP/1.1\r\n";
                $in .= "Accept: */*\r\n";
                $in .= "Host: " . $url2["host"] . "\r\n";
                $in .= "User-Agent: Lowell-Agent\r\n";
                $in .= "Content-type: application/x-www-form-urlencoded\r\n";
                $in .= "Content-Length: " . strlen($post_data2) . "\r\n";
                $in .= "Connection: Close\r\n\r\n";
                $in .= $post_data2 . "\r\n\r\n";
                unset($post_data2);
                $time1 = getTime();
                if(!@socket_write($socket, $in, strlen($in)) ){
                    header("Content-Type:text/plain;charset=utf-8");
                    echo sprintf( "Unable to write to socket: %s", socket_strerror( socket_last_error() ))  ;
                    socket_close($socket);
                    return false;
                }
                socket_close($socket);
                unset($in);
                return true;
            break;
            default:
                echo 'Unknowd method';
                exit;
        }
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

PHP中只发起请求不接受响应,用途:上报

只要用于只需要发起请求,不需要接收响应值的,因为接收响应值浪费大量时间 $url = 'http://tencentlog.com/stat/report.php';$post_data = arr...

客户端请求、服务器响应及其HTTP状态码

一JSP客户端请求        当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信 息头的一部分来传送的。我们可以查阅HTTP协议来获得...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

grails发送POST请求,接受请求

grails发送POST请求,接受请求 //此连接地址为配置到app-config.properties下面 def http = new HTTPBuilder(ConfigurationH...

Fiddler中修改请求和响应的方法

背景:在一次验证bug的过程中,由于服务端问题修复,导致响应的数据都会是正常的。但,我有一个bug是需要在服务端返回的响应数据是异常的情况下,才能复现。这就必须要拦截到服务端的返回并且修改返回的数据,...

HTTP请求报文和响应报文

请求报文http请求报文可以分成三个部分: 1.请求行 2.请求头 3.请求体请求行请求行分为三部分: 1。请求方法:这里的请求方法指的是http请求方法(get,post,delete,pu...

HTTP请求报文和响应报文

HTTP报文

HTTP请求报文和响应报文

HTTP(Hypertext Transfer Protocol, 超文本传输协议)是目前最常用的应用层协议之一。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息...

php、asp 发起post请求

asp使用MSXML2.XMLHTTP发出post请求 参考 现在不再流行,可今天需要写一个支持post的asp程序,好不容易找了个能用的。asp函数返回值就是赋值给一个和函数名相同的变量。解决乱...

http请求报文及响应报文

一、HTTP报文格式 HTTP报文分为两类:请求报文request, 响应报文response 二、HTTP请求报文: ASCII文本 (易于人读格式) GET /somedir/page.ht...

HTTP请求报文和响应报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。   1、请求报文 一个HTTP请求报文由请求行(r...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)