2010-06-28 86 views
1

近兩天來我一直在對付這個問題,我希望有人能夠幫助我。在Apache服務器上支持XAuth的PHP Twitter代理

我住在中國,並有一臺位於香港的服務器(共享主機)。我在服務器上設置了一個PHP Twitter代理,並使用Twitter for iPhone(AKA Tweetie)連接到代理。過去一年左右它的運作非常好。

昨天更新了iPhone的Twitter,現在需要XAuth授權才能連接到twitter.com(以前,它使用的是基本身份驗證)。自更新以來,我無法使用我的代理對自己進行身份驗證,儘管(我相信是)對我的代理進行了適當的更改。

從概念上講,這不是一個非常難以解決的問題。爲了使用XAuth與twitter.com進行身份驗證,應用必須發送POST請求至https://api.twitter.com/oauth/access_token。 POST正文必須是這樣的形式:

x_auth_username=aUserName&x_auth_mode=client_auth&x_auth_password=aPassword 

此外,POST請求必須在形式Authorization頭:

OAuth oauth_signature_method="HMAC-SHA1", oauth_consumer_key="IQKbtAYlXsomeLGkey0HUA", oauth_nonce="8B265865-3F57-44FF-BCD6-E009EA7D4615", oauth_signature="sbwblaho64blahr934mZQ+23DYQ=", oauth_timestamp="1277356846", oauth_version="1.0" 

因此,使用什麼我做的.htaccess複製該驗證頭使用此代碼$ _REQUEST變量:

RewriteCond %{HTTP:Authorization} ^OAuth.* 
RewriteRule (.*) index.php?OAuth=%{HTTP:Authorization} [QSA,L] 

我的代理副本是$ _REQUEST變量的內容到一個實例變量名爲$自我> oauthHeader。然後,我做它作爲一個頭添加到使用下面的代碼我捲曲的要求:

if (isset($this->oauthHeader)) {  
    $headers[] = 'Authorization: '.$this->oauthHeader; 
    $headers[] = 'Content-Type: application/x-www-form-urlencoded'; 
    $curl_options[CURLOPT_HTTPHEADER] = $headers; 
} 

我也是原始請求的POST機身採用增加捲曲的POST體:

$curl_options[CURLOPT_POST] = true; 
$curl_options[CURLOPT_POSTFIELDS] = @file_get_contents("php://input"); 

我送向Twitter發送cURL請求。似乎一切正常,但我不可避免地收到「無法驗證oauth簽名和令牌」的回覆。

我在我的智慧結束,我不能爲我的生活認爲我做錯了什麼。任何幫助將非常感激。

回答

0

您可以使用此替代解決方案,因爲只有越獄的iOS設備:http://code.google.com/p/gfwinterceptor/

+0

這很有趣,但我正在尋找一個服務器端解決方案。我不會越獄我的iPhone,我很好奇看到我在PHP或我的一般方法中解決該問題所犯的錯誤。 – Anthony 2010-07-28 09:31:59

+0

我建議使用OAuth設置一個與Twitter對話的服務,移動客戶端將使用基本身份驗證與Proxy進行通話,這是一種簡單的方法。 而且,由於您在代碼中收到了一個簽名錯誤,因此應該是您不實際轉發Twitter用於身份驗證的所有特殊標頭的情況。 – overboming 2010-07-28 13:23:22