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中get、post和request的用法

在PHP开发的WEB应用程序中,所有非PHP代码以及输出语句中的内容都会被输出,那么程序又是如何接收输入内容的呢?相信不少人一定想到了WEB表单!在HTTP协议下,输入输出的原型其实是HTTP请求与响...
  • JamesLi6
  • JamesLi6
  • 2016年06月20日 21:42
  • 1244

php ajax数据传输和响应

整理在php后端与前端数据传输过程中一些细节。
  • SchopenhauerZhang
  • SchopenhauerZhang
  • 2017年02月25日 10:11
  • 1394

用PHP发送POST请求

/** * 发送post请求 * @param string $url 请求地址 * @param array $post_data post键值对数据 * @return string *...
  • jimlong
  • jimlong
  • 2015年11月12日 10:36
  • 4180

PHP发起异步请求

当我们要与第三方接口进行交互的时候,经常会使用到curl来调取接口。但是,我们会面临到一个问题,就是一个页面可能需要调取多个接口,这个时候,用curl的效率可能会有点低,因为是同步调取的。 如果能够可...
  • maquealone
  • maquealone
  • 2017年04月15日 14:28
  • 1091

HTTP请求和响应

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。   1.HTTP请求格式:  一个HTTP请求报文由请求...
  • Caesardadi
  • Caesardadi
  • 2013年02月28日 10:19
  • 4748

PHP 如何发起异步请求

有人说,限制激发创造力。如果真这样,PHP就是成熟的创造性解决方案。我刚上周构建了调用Segment.io的API的PHP库,发现了各种不同的方法可以提高服务端请求性能。 设计客户端类向API发...
  • lzb2512
  • lzb2512
  • 2013年05月31日 16:55
  • 2292

PHP 如何发起异步请求

有人说,限制激发创造力。如果真这样,PHP就是成熟的创造性解决方案。我刚上周构建了调用Segment.io的API的PHP库,发现了各种不同的方法可以提高服务端请求性能。 设计客户端类向API发...
  • u011553255
  • u011553255
  • 2013年11月19日 10:02
  • 635

http请求头和响应头的含义

http://m.blog.csdn.net/article/details?id=8752914 http请求头和响应头的含义 参考文献:HTTP/1.1 Cac...
  • jeffasd
  • jeffasd
  • 2017年03月03日 15:05
  • 556

使用 PHP 处理HTTP 请求报文

HTTP 请求 学习笔记
  • andrewpj
  • andrewpj
  • 2015年05月03日 17:22
  • 7353

PHP发送HTTP请求(POST请求、GET请求)

file_get_contents版本: 01 /** 02  * 发送post请求 ...
  • BabyNiu411
  • BabyNiu411
  • 2015年03月02日 16:03
  • 6709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中只发起请求不接受响应,用途:上报
举报原因:
原因补充:

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