服务器始终使用curl响应200,但在浏览器中访问时会显示错误消息

时间:2012-01-23 12:30:49

标签: api post curl

我正在尝试使用curl与第三方服务器通信。

认证系统如下:

  1. 使用凭据来请求Cookie
  2. 设置Cookie
  3. 提出要求
  4. 这本身并不是问题而且我能够提出请求等,但无论我发送什么服务器,即使我发送无效的数据格式,服务器总是会响应200。如果我在浏览器中放入相同的URL,则会返回有关无效格式的错误消息。

    有谁知道为什么会这样?提前谢谢,

    function go($url,$postvars=null)
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie_.txt');
        curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie_.txt');    
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    
                curl_setopt($ch, CURLOPT_POST, 1); 
                curl_setopt($ch,CURLOPT_POST,count($postvars));
                $postfields = http_build_query($postvars);
                curl_setopt($ch, CURLOPT_POSTFIELDS,$postfields);    
         curl_exec($ch);
         curl_close($ch); 
     }
    
     go($url,$login_array);  //login=>'',pass=>''
     go($url,$some_request_array);
    

1 个答案:

答案 0 :(得分:1)

很可能是服务器代码中的错误,这意味着它会发送200个状态及其错误消息。因此,在浏览器中它将是一个错误消息,因为这是在正文中,它仍然是“成功的”。在浏览器访问中设置拦截(firebug网络,小提琴等)并查看状态。

如果是这种情况,您有两种选择:

  1. 让负责服务器的一方负责修复它。
  2. 自行解析错误消息,然后将其视为错误条件。