$value1, 'key2'=>$value2);
* @return bool|mixed
*/
public static function get($url, $param = array())
{
//set_time_limit(0); // 暂时默认30秒足够了
$url_array = parse_url($url); // 获取URL信息,以便拼凑HTTP HEADER
$host = $url_array['host'];
$browserHost = $url_array['host'];
$defaultPort = self::DEFAULT_PORT;
if(stripos($url,"https://") !== FALSE){
$host = "ssl://".$host;
$defaultPort = self::DEFAULT_HTTPS_PORT;
}
$port = isset($url_array['port'])? $url_array['port'] : $defaultPort;
$path = $url_array['path'] ."?". http_build_query($param); // 注意: query参数从$param统一传入
$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'; // 默认用户代理(浏览器信息)
if(isset($_SERVER['HTTP_USER_AGENT'])) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
}
Log::init();
//Log::DEBUG('非阻塞式的异步GET请求: host=' . $host . ', path=' . $path . ', port=' . $port);
$fp = @fsockopen($host, $port, $errno, $errstr, self::DEFAULT_TIMEOUT);
if (!$fp) {
Log::ERROR("{$host}{$path}:{$port} {$errstr} ({$errno})
\r\n");
return false;
}
stream_set_blocking($fp, 0);//非阻塞模式
$header = "GET {$path} HTTP/1.1\r\n";
$header .= "Host: $browserHost\r\n";
$header .= "User-Agent: " . $useragent . "\r\n"; // 注意: apache服务器需要设置, nginx服务器不需要
$header .= "Connection: Close\r\n\r\n";//长连接关闭
fwrite($fp, $header);
/*
$result = '';
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
*/
fclose($fp);
//Log::DEBUG('非阻塞式的异步GET result = '. $result);
return true;
}
/**
* 非阻塞式的异步POST请求
* @param string $url http://mall1.mkmart.com/wechat/send 完整url地址
* @param array $param
* sample: $params = array('key1'=>$value1, 'key2'=>$value2);
*/
public static function post($url, $param = array())
{
//set_time_limit(0); // 暂时默认30秒足够了
$url_array = parse_url($url); // 获取URL信息,以便拼凑HTTP HEADER
$host = $url_array['host'];
$browserHost = $url_array['host'];
$defaultPort = self::DEFAULT_PORT;
if(stripos($url,"https://") !== FALSE){
$host = "ssl://".$host;
$defaultPort = self::DEFAULT_HTTPS_PORT;
}
$port = isset($url_array['port'])? $url_array['port'] : $defaultPort;
$path = $url_array['path'];
$data = http_build_query($param); // POST数据
$useragent = 'chrome'; // 默认用户代理(浏览器信息)
if(isset($_SERVER['HTTP_USER_AGENT'])) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
}
Log::init();
//Log::DEBUG('非阻塞式的异步POST请求: host=' . $host . ', path=' . $path . ', port=' . $port);
$fp = fsockopen($host, $port, $errno, $errstr, self::DEFAULT_TIMEOUT);
if (!$fp) {
Log::ERROR("$errstr ($errno)
\n");
return false;
}
// 设置非阻塞模式
stream_set_blocking($fp, 0);
$out = "POST $path HTTP/1.1\r\n";
$out .="Host: $browserHost\r\n";
$out .= "User-Agent: " . $useragent . "\r\n"; // 注意: apache服务器需要设置, nginx服务器不需要
$out .= "Content-Type: application/x-www-form-urlencoded\r\n"; // POST数据
$out .= "Content-Length: ". strlen($data) ." \r\n"; // POST数据的长度
$out .="Connection: Close\r\n\r\n";//长连接关闭
$out .= $data; // 传递POST数据
fwrite($fp, $out);
fclose($fp);
//Log::DEBUG('非阻塞式的异步POST请求: out=' . $out);
return true;
}
}