Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api 服务器总是用curl响应200,但在浏览器中访问时会给出错误消息_Api_Post_Curl - Fatal编程技术网

Api 服务器总是用curl响应200,但在浏览器中访问时会给出错误消息

Api 服务器总是用curl响应200,但在浏览器中访问时会给出错误消息,api,post,curl,Api,Post,Curl,我正在尝试使用curl与第三方服务器通信 认证系统如下所示: 使用凭据请求cookie 设置cookie 提出请求 这本身并不是一个问题,我能够发出请求等,但无论我发送什么,服务器总是响应200,即使我发送了无效的数据格式。如果我将相同的url放在浏览器中,它将返回有关无效格式的错误消息 有人知道为什么会这样吗?提前感谢, function go($url,$postvars=null) { $ch = curl_init($url); curl_setopt($ch, CURL

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

认证系统如下所示:

  • 使用凭据请求cookie
  • 设置cookie
  • 提出请求
  • 这本身并不是一个问题,我能够发出请求等,但无论我发送什么,服务器总是响应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);
    

    很可能是服务器代码中有一个bug,这意味着它会发送200个状态和错误消息。因此,在浏览器中,它将是一条错误消息,因为这是正文中的内容,所以它仍然是“成功的”。在浏览器访问上放置一个截取(firebug网络、fiddler等),查看状态

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

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

  • 嗨,乔恩。谢谢。这就是问题所在。但是为什么curl不向我显示带有200响应的错误消息呢?让我吃惊的是,我假设它可能是,尽管您是否会看到它将不仅仅取决于您对响应所做的操作,而且可能会从HTTP(我知道)进一步移动到curl的工作(我不知道)。