$file='www.xxx.com.cn';
 $fp = fsockopen($file, 80, $errno, $errstr);
if (!$fp) {
    echo "999";
    echo "$errstr ($errno) <br />\n";
} else {
   fputs($fp,"GET / HTTP/1.0\nHost: $file\n\n");
        while(!feof($fp)) {
                echo file_get_contents($fp);
        }
        fclose($fp);
}报错: 
HTTP/1.1 400 Bad Request Content-Type: text/html Date: Fri, 08 Apr 2011 06:46:11 GMT Connection: close Content-Length: 39
Bad Request (Invalid Hostname)
不知道是什么原因引起的?希望高手帮帮忙!

解决方案 »

  1.   

    一般情况下是网站限制了客户端访问的类型,只允许浏览器访问。
    浏览器在访问网站是会添加很多的http头信息,比如,agent, 浏览器表示,cookie等等。所以你要模拟浏览器去访问这个网站,就需要用curl来实现,在发送请求的时候也加入以上的http头信息。
      

  2.   


     $url = "http://www.xxx.com.cn";
        $ch = curl_init();
        // 2. 设置选项,包括URL
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_HTTPHEADER,array(
             "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; TheWorld)",
             "Accept-Language: en"
        ));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        // 3. 执行并获取HTML文档内容
        $output = curl_exec($ch);
    var_dump($output);
        // 4. 释放curl句柄
        curl_close($ch);
    这是我用curl的代码,但还是报错 Bad Request!
      

  3.   

    用HTTPwatch跟踪一下,看看需要提交哪些内容,然后模拟。