• PHP socket模拟POST请求


    <?php
    if (! function_exists ( 'socket_post' )) {
    	function socket_post($url, $data, $referer = '') {
    		if (! is_array ( $data )) {
    			return;
    		}
    		$data = http_build_query ( $data );
    		$url = parse_url ( $url );
    		if (empty ( $url ['scheme'] ) || $url ['scheme'] != 'http') {
    			die ( "Error: Only HTTP request are supported !" );
    		}
    		$host = $url ['host'];
    		$path = isset ( $url ['path'] ) ? $url ['path'] : '/';
    		// open a socket connection on port 80 - timeout: 30 sec
    		$fp = fsockopen ( $host, 80, $errno, $errstr, 30 );
    		if ($fp) {
    			// send the request headers:
    			$length = strlen ( $data );
    			$POST = <<<HEADER
    POST {$path} HTTP/1.1
    Accept: text/plain, text/html
    Referer: {$referer}
    Accept-Language: zh-CN,zh;q=0.8
    Content-Type: application/x-www-form-urlencode
    Cookie: token=value; pub_cookietime=2592000; pub_sauth1=value; pub_sauth2=value
    User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17
    Host: {$host}
    Content-Length: {$length}
    Pragma: no-cache
    Cache-Control: no-cache
    Connection: close
    
    {$data}
    HEADER;
    			fwrite ( $fp, $POST );
    			$result = '';
    			while ( ! feof ( $fp ) ) {
    				// receive the results of the request
    				$result .= fread ( $fp, 512 );
    			}
    		} else {
    			return array (
    					'status' => 'error',
    					'error' => "$errstr ($errno)" 
    			);
    		}
    		
    		// close the socket connection:
    		fclose ( $fp );
    		
    		// split the result header from the content
    		$result = explode ( "
    
    ", $result, 2 );
    		
    		// return as structured array:
    		return array (
    				'status' => 'ok',
    				'header' => isset ( $result [0] ) ? $result [0] : '',
    				'content' => isset ( $result [1] ) ? $result [1] : '' 
    		);
    	
    }
    }
    print_r ( socket_post ( 'http://blog.51cto.com/', array (
    		'name=' => 'qiufeng',
    		'password' => md5 ( 'www.fengdingbo.com' ) 
    ) ) );
    ?>
    
  • 相关阅读:
    LinkedBlockingQueue 单向链表实现的阻塞队列
    ArrayBlockingQueue 实现定时推送数据
    前台接收后端的JsonArray,循环输入页面表格
    一个常用的文件操作类
    DelayQueue 延时获取元素的无界阻塞队列
    单例设计模式
    使用SQL Server Data Tools (SSDT)比较和同步两个数据库的架构或者数据
    Entity Framework技能知识点测试2
    JS设置localStorage有效期
    Entity Framework技能知识点
  • 原文地址:https://www.cnblogs.com/vania/p/4701902.html
Copyright © 2020-2023  润新知