2013-04-07 38 views
0

我自己编写了一个REST API,它使用了另一个REST API。使用REST API时的400_Bad_Request - 随机并持续数小时?

它经常起作用,但它也经常导致400_Bad_Request。

流程是这样的:它工作,工作,工作了很长时间,然后它不工作,不工作,并且不能工作很长时间。然后我休息一小时或两小时后再次运作。 无论我使用什么浏览器 - 铬或火狐(但我确实尝试清除缓存)。如果我直接在浏览器中输入URL(我试图在我的Web服务中使用该URL),那么我会得到正确的响应,所以它不像他们阻止我的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)); 
} 
+0

apiFunction的哪些部分可能是基于时间的?或者它的哪一部分可能会在一小时和一小时之间发生显着变化? – 2013-04-07 07:57:50

+0

@TashPemhiwa其实没有。另外,我直接在浏览器请求中传递相同的参数,并且很好。 – user1831003 2013-04-07 08:24:24

+0

也许你有间谍软件或拦截你的请求? – 2013-04-07 09:05:09

回答

1

你会需要,如果你做的完全一样的请求和响应不返回超过400个状态码之外的任何消息体接触API提供商。

我怀疑你正在达到某种速率限制,如果你从同一个IP地址执行很多请求(他们应该返回429太多请求,但我看到很多API返回400以限制速度) 。

+0

但为什么浏览器在同一时期工作正常我的代码不工作?浏览器显然具有相同的IP地址。 – user1831003 2013-04-08 00:53:47

+0

确实。在这种情况下,唯一的区别是Cookie和标题(如用户代理)。你是否尝试过从命令行手动卷曲或者使用wget?尝试也解析,看看是否有任何响应体之前转储响应的内容。 curl_getinfo($ CH)也可以给你关于它的更多信息:http://php.net/manual/en/function.curl-getinfo.php – 2013-04-08 04:43:45

+0

我下载curl.exe与Windows中启用SSL。有用。为什么我的代码不工作?! curl_getinfo没有导致任何有用的。 – user1831003 2013-04-08 07:36:44