2010-10-06 156 views
0

所以我是所有这些的初学者。我试图教自己如何正确使用CURL,并在API调用中涉猎一些(不用担心,这个问题只涉及使用CURL)。CURL请求问题

现在我的原始代码工作得很好 - 我使用urlencode构造请求,并且绝大多数请求都引发了我正在寻找的响应。然而,接收到的回复中约有10%不会检索到我需要的结果。让我举一个例子:

$urlToFetch = "http://lsapi.seomoz.com/linkscape/url-metrics/" . urlencode($objectURL) . "?" . $this->structureURL(); 
$response = ConnectionUtil::makeRequest($urlToFetch); 

使用上面的代码将产生$ urlToFetch数据如下: http://lsapi.seomoz.com/linkscape/url-metrics/www.alinki.com%2Fdomainlinks.php%3Fpage%3D516000?AccessID=XXXXXX&Expires=1286388878&Signature=YYYYYYYYY

此经过卷曲,并得到来自SEOmoz的API的响应 - 响应,但是,缺少一些数据。我探讨了一下,发现URL的结构是一个问题。例如,通过将值从www.alinki.com%2Fdomainlinks.php%3Fpage%3D516000更改为www.alinki.com/domainlinks.php?page=516000我可以检索我正在查找的所有字段。按照这个逻辑,我应该能够构造一个类似于这样的URL: (我删除了http,因为我不能发布多个链接)lsapi.seomoz.com/linkscape/url-metrics/www.alinki.com/domainlinks.php?page=516000?AccessID=XXXXXX&Expires=1286388878&Signature=YYYYYYYYY 并检索我需要的所有字段。问题是,当我尝试将URL传递给CURL时,它不会完成请求。下面是用于卷曲请求代码:

public static function makeRequest($urlToFetch) 
{ 
$curl_handle = curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL, "$urlToFetch"); 
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, ConnectionUtil::CURL_CONNECTION_TIMEOUT); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 

$buffer = curl_exec($curl_handle); 
//var_dump($buffer); 
curl_close($curl_handle); 

$arr = json_decode($buffer); 

return $arr; 
} 

而且我要求如下:对我在做什么愚蠢的错误

$urlToFetch = "http://lsapi.seomoz.com/linkscape/url-metrics/" . urlencode($objectURL) . "?" . $this->structureURL(); 
    $response = ConnectionUtil::makeRequest($urlToFetch); 

任何想法?

+0

你是什么意思的“不会完成请求”?卷曲失败?远程服务器返回错误页面而不是所需的数据? – 2010-10-06 20:58:18

回答

0

尝试使用http_build_query而不是urlencode来生成您的查询字符串。它看起来像seomoz代码没有正确处理urlencoded数据。