示例#1
0
 /**
  *  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;
 }