400_Bad_Request在使用REST API时——随机的,持续几个小时


400_Bad_Request when consuming REST API - randomly and lasts for a couple of hours?

我自己编写了一个REST API,它使用另一个REST API。

它通常有效,但它也经常导致400_Bad_Request。

流程是这样的:它工作,工作,工作这么长时间,然后它不工作,不工作,不工作这么长时间。然后我休息一下,一两个小时后,它又起作用了。不管我使用什么浏览器- chrome或firefox(但我确实尝试清除缓存)。如果我直接在浏览器中输入URL(我试图在我的web服务中使用),然后我得到正确的响应,所以它不像他们封锁我的ip地址一段时间。

    public function apiFunction()
    {
        parse_str($_SERVER["QUERY_STRING"]);
        $host = "THE API ADDRESS"; //omitted due to privacy
        $tran = new apiCallClass( "username", "pwd" ); //omitted due to privacy  
        $tran->setSomeData( $var1, $var2, $var3 ); 
        $tran->setSomeRequest( $var4, $var5 ); 
        $tran->setSomeField("somevar", $var6); 
        $tran->setHost( $host ); 
        $tran->execute(); 
        parse_str($tran->ResponseRaw,$theArr);
        //... other code goes here, 
        //but I can already see ResponseRaw has 400_Bad_Request
    }

这个函数可能是问题的根源:如果我复制$url的值并将其粘贴到浏览器中,它可以工作,所以一定是这个函数做错了:

function processRequest( $url ) 
{ 
     $temp = $url;
     $ch = curl_init($url); 
     curl_setopt($ch,CURLOPT_FRESH_CONNECT,TRUE); 
     curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); 
     curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); 
     curl_setopt($ch,CURLOPT_HEADER, 0); 
     if ( !$this->isBlank($this->ProxyHost) ) 
     { 
     curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); 
     curl_setopt ($ch, CURLOPT_PROXY,$this->ProxyHost); 
     } curl_setopt ($ch, CURLOPT_URL, $url); 
     curl_setopt ($ch, CURLOPT_TIMEOUT, 120); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE); 
     $this->parseResponse( curl_exec($ch) ); 
}

如果您发出完全相同的请求,并且响应除了400状态码之外没有返回任何消息体,那么您将需要联系API提供者。

我怀疑你达到了某种速率限制,如果你从相同的IP地址执行大量的请求(他们应该返回一个429太多的请求,但我已经看到许多api返回400速率限制)。