我已经对这个问题进行了近两天的打击,我希望这个网站上有人可以帮助我。
我住在中国,并在香港设有服务器(共享托管)。我在服务器上设置了一个PHP Twitter代理,并使用Twitter for iPhone(AKA Tweetie)连接到代理。它在过去一年左右的工作非常精彩。
Twitter for iPhone昨天更新,现在要求XAuth授权连接到twitter.com(以前使用Basic Auth)。自更新以来,我无法使用我的代理对自己进行身份验证,尽管我(我相信)对我的代理进行了适当的更改。
从概念上讲,这不是一个非常难以破解的问题。要使用XAuth通过twitter.com进行身份验证,应用必须向https://api.twitter.com/oauth/access_token发送POST请求。 POST主体必须采用以下形式:
x_auth_username=aUserName&x_auth_mode=client_auth&x_auth_password=aPassword
此外,POST请求必须具有以下格式的授权标头:
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使用此代码将Auth标头复制到$ _REQUEST变量:
RewriteCond %{HTTP:Authorization} ^OAuth.*
RewriteRule (.*) index.php?OAuth=%{HTTP:Authorization} [QSA,L]
我的代理将该$ _REQUEST变量的内容复制到名为$ self-> oauthHeader的实例变量中。然后,我使用以下代码将其添加为我的cURL请求的标题:
if (isset($this->oauthHeader)) {
$headers[] = 'Authorization: '.$this->oauthHeader;
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
$curl_options[CURLOPT_HTTPHEADER] = $headers;
}
我还使用以下命令将原始请求的POST主体添加到cURL的POST主体:
$curl_options[CURLOPT_POST] = true;
$curl_options[CURLOPT_POSTFIELDS] = @file_get_contents("php://input");
我将cURL请求发送到Twitter。一切似乎都正常,但我不可避免地收到“无法验证oauth签名和令牌”的回复。
我在我的智慧结束,我不能为我的生活思考我做错了什么。任何帮助将不胜感激。
答案 0 :(得分:0)