2012-05-25 36 views
0

隨着我發送的每一條Twitter請求,the returned HTTP headers should include X-RateLimit-Limit在PHP中檢索Twitter的X-RateLimit限制

但是,我似乎無法檢索這些使用PHP。有人能告訴我我犯了什麼頭痛的錯誤嗎?

我以正常的方式設置了我的蜷縮,並能夠成功地獲取和POST請求。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 

$response = curl_exec($ch); 
$response_info=curl_getinfo($ch); 
$erno = curl_errno($ch); 
$er = curl_error($ch); 
curl_close($ch); 

我能得到一些迴應信息,如HTTP_CODE

$response_info['http_code'] 

,但此行只是返回null

//Doesn't bloody work. No idea why! 
$rate_limit = $response_info['X-RateLimit-Limit']; 

我運行PHP版本5.3.10。

EDIT

這是的print_r($ response_info)的結果;

Array 
(
[url] => https://api.twitter.com/1/statuses/home_timeline.json... 
[content_type] => application/json;charset=utf-8 
[http_code] => 200 
[header_size] => 695 
[request_size] => 410 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 1.239977 
[namelookup_time] => 0.007361 
[connect_time] => 0.155783 
[pretransfer_time] => 0.465397 
[size_upload] => 0 
[size_download] => 99425 
[speed_download] => 80182 
[speed_upload] => 0 
[download_content_length] => 99425 
[upload_content_length] => 0 
[starttransfer_time] => 0.794829 
[redirect_time] => 0 
[certinfo] => Array() 
[redirect_url] => 
[request_header] => GET /1/statuses/home_timeline.json... HTTP/1.1 
Host: api.twitter.com 
Accept: */* 
) 
+0

您是否嘗試過使用'的var_dump($ response_info);'看看你實際上得到來自Twitter? – Daan

+0

我有 - X-RateLimit-Limit沒有出現, –

+0

嗯。撥打[account/rate_limit_status](https://dev.twitter.com/docs/api/1/get/account/rate_limit_status)是否會爲您返回正確的信息? – Daan

回答

3

curl_getinfo不返回的響應頭,大約只請求其他元信息。要檢索標題,請將CURLOPT_HEADER設置爲true。這將包括輸出中的標題。從響應主體分開他們這樣做:

list($headers, $body) = explode("\n\n", $response, 2); 

爲了解析頭,爆炸再次:

$headers = explode("\n", $headers); 
foreach ($headers as $header) { 
    list($key, $value) = explode(':', $header, 2); 
    $headers[trim($key)] = trim($value); 
} 

echo $headers['X-RateLimit-Limit'];