1、sock函数不能直接穿过代理
2、你有$out .= "Content-Length: 796\r\n";但未见只796字节的内容

解决方案 »

  1.   

    <?php
    $fp = fsockopen("www.ctrip.com", 80, $errno, $errstr, 80);
    if (!$fp) {
        echo "$errstr ($errno)";
    } else {
        $out  = "POST /superet/Flight/SuperFlightSearchResult.asp HTTP/1.1\r\n";
        $out .= "Host: www.ctrip.com\r\n";
        $out .= "Accept: */*\r\n";
        $out .= "Accept-Language: zh-cn\r\n";
        $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $out .= "Accept-Encoding: gzip, deflate\r\n";
        $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)\r\n";
    $out .= "Content-Length: 35\r\n";
    $out .= "Cache-Control: no-cache\r\n";
    $out .= "\r\ncurDate=2005-6-24&FlightWay1=Single\r\n\r\n";
        fputs($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
    ?>
      

  2.   

    POST方法下post参数的内容前面后面都要\r\n,content-length应该是post参数的长度。
      

  3.   

    还有php的fsocket读asp的输出有问题
    估计是因为eof的定义不一样
    php.ini里面有一个设置是自动判断eof的,打开看看
      

  4.   

    用fsockopen POST信息可以得到结果??
    第一次听说哦。。
    严重关注中
      

  5.   

    哈哈~~~现在问题居然解决啦~~不过不是你们所说的问题,其实我也不清楚怎么解决的~~不知道自己哪里改动了一下,突然就好了~~~to  xuzuning(唠叨):
    "curDate=2005-6-24&FlightWay1=Single" 我贴上来的不完整,所以Content-Length:参数没有修改~小小的疏忽~~呵呵~~
    to icewolf_li(冰狼):
    你写的不错,post数据和head数据之间的确必须要加 "两个\r\n" ,不过post数据末尾的"两个\r\n"不是必须的~~~
    to syre(神仙) :
    事实证明,读asp的输出是没有问题的~可以放心啦~~to keaizhong(可爱钟) :
    sock 相当于代替了浏览器和服务器交互的过程,fsockopen这个函数很有用哦~~你可以研究一下~哈哈
    另外我发现有时候可以分两次fputs信息,第一次是发送head信息,第二次是发送post信息,之间可以用一个函数 usleep(10) ,因为我发现IE浏览器就是分两次提交的,不知道是为什么要这样?????????????????????;当然我现在一次性提交head信息和post信息暂时也成功了。
      

  6.   

    还有,最好把这句去掉~
    $out .= "Accept-Encoding: gzip, deflate\r\n";不然,有时会是乱码这是代表Gzip服务端压缩后传给客户端的,只要去掉客户端的gzip请求,服务端就不再压缩了。而是以纯文本方式传送。