/** * post数据 * @param string $url post的url * @param int $limit 返回的数据的长度 * @param string $post post数据,字符串形式username='******'&password='******' * @param string $cookie 模拟 cookie,字符串形式username='******'&password='******' * @param string $ip ip地址 * @param int $timeout 连接超时时间 * @param bool $block 是否为阻塞模式 * @return string 返回字符串 */ private function _post($url, $limit = 0, $post = '', $cookie = '', $ip = '', $timeout = 15, $block = true) { $return = ''; $url = str_replace('&', '&', $url); $matches = parse_url($url); $host = $matches['host']; $path = $matches['path'] ? $matches['path'] . ($matches['query'] ? '?' . $matches['query'] : '') : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80; $siteurl = Sms::_get_url(); if ($post) { $out = "POST {$path} HTTP/1.1\r\n"; $out .= "Accept: */*\r\n"; $out .= "Referer: " . $siteurl . "\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n"; $out .= "Host: {$host}\r\n"; $out .= 'Content-Length: ' . strlen($post) . "\r\n"; $out .= "Connection: Close\r\n"; $out .= "Cache-Control: no-cache\r\n"; $out .= "Cookie: {$cookie}\r\n\r\n"; $out .= $post; } else { $out = "GET {$path} HTTP/1.1\r\n"; $out .= "Accept: */*\r\n"; $out .= "Referer: " . $siteurl . "\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n"; $out .= "Host: {$host}\r\n"; $out .= "Connection: Close\r\n"; $out .= "Cookie: {$cookie}\r\n\r\n"; } $fp = @fsockopen($ip ? $ip : $host, $port, $errno, $errstr, $timeout); if (!$fp) { return ''; } stream_set_blocking($fp, $block); stream_set_timeout($fp, $timeout); @fwrite($fp, $out); $status = stream_get_meta_data($fp); if ($status['timed_out']) { return ''; } while (!feof($fp)) { if (($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) { break; } } $stop = false; while (!feof($fp) && !$stop) { $data = fread($fp, $limit == 0 || $limit > 8192 ? 8192 : $limit); $return .= $data; if ($limit) { $limit -= strlen($data); $stop = $limit <= 0; } } @fclose($fp); var_export($return); exit; //部分虚拟主机返回数值有误,暂不确定原因,过滤返回数据格式 $return_arr = explode("\n", $return); if (isset($return_arr[1])) { $return = trim($return_arr[1]); } unset($return_arr); return $return; }