2012-02-17 81 views
3

我有一個PHP腳本,它使用Curl獲取有關我們網址的推文數量;使用這個網址爲例:PHP和Curl無法在特定網址上工作

http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com

另外,我使用的是菲爾鱘魚的捲曲庫CodeIgniter的執行得到: https://github.com/philsturgeon/codeigniter-curl

當我在本地運行的腳本,該腳本運行良好。但是,當我將它部署到我們的生產環境時,只要嘗試獲取上面的Twitter URL,它就會中斷。

這是奇怪的事情。我從Facebook Graph中爲同一個基本URL執行類似的計數檢索,並且它在生產服務器上工作。請參閱下面的示例代碼:

$fb_get_url = "http://graph.facebook.com/?ids=http://stackoverflow.com"; 
    $twitter_get_url = "http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com"; 

    $fb_response_json = $this->curl->simple_get($fb_get_url, array(CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_FAILONERROR => true)); 
    $twitter_response_json = $this->curl->simple_get($twitter_get_url, array(CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_FAILONERROR => true)); 

simple_get與$ fb_get_url正常工作。不過,當我讓Curl執行$ twitter_get_url時,我似乎遇到錯誤。不幸的是,我不能告訴你錯誤是什麼,因爲錯誤發生後連接不斷重置。另外,爲了提醒你,我自己的機器上的Twitter網址也可以正常工作。就在我將它部署到我們的服務器時,它就會中斷。

這是奇怪的事情。我嘗試了ssh'ing進入我們的每臺服務器,並從命令行使用相同的URL執行Curl,並且工作正常。這證明這個電話沒有被防火牆或其他東西阻擋。

所以我試圖弄清楚的是:爲什麼從CL上運行Curl工作,但使用Curl lib來獲取相同的URL似乎打破了?我不認爲這是我使用的CI Curl庫中的一個錯誤,因爲我嘗試使用http://php.net/manual/en/book.curl.php中的http_response函數來測試,並且它也似乎拋出了一個錯誤。

至於確切的錯誤;我唯一的線索是錯誤的,腳本需要很長時間才能失敗並重置連接;所以我想這可能是暫停。我將下面的代碼放在控制器的頂部,以啓用錯誤顯示;但仍然沒有得到任何錯誤信息:

error_reporting(E_ALL); 
ini_set('display_errors','1'); 

任何建設性的意見,非常感謝。

謝謝,弗蘭克

+3

這不是一個答案到你的問題,但它看起來像你得到的twitter數不是官方允許的。請參閱https://dev.twitter。com/discussion/5653 – 2012-02-18 00:01:13

+0

您是否嘗試過在不使用庫的情況下構建CURL請求? – Brendan 2012-02-24 15:52:25

+0

是的,我嘗試了一個直接的PHP Curl請求,而不是使用庫;有同樣的問題。 – 2012-02-24 17:08:14

回答

0

僅供參考,

從來沒有想通了,爲什麼Facebook的URL工作,但Twitter的一個都沒有。我們最終通過使用Tweet按鈕的onShare處理程序來調用AJAX服務來解決此問題,該服務手動增加了份額計數;因此不需要直接從Twitter獲取份額。這不是一個完美的解決方案(它不會跟蹤轉發);但它足夠滿足我們的需求。

無論如何感謝人們。