我试图通过试验twitteroauth php库来更好地理解OAuth。
我的理解是,对OAuth进行身份验证的方法是在使用cUrl时使用“授权”标头。但是,在检查twitteroauth库的源代码时,我可以看到为发布请求设置了标题:
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
应该在“授权”标题中设置的参数实际上是在帖子正文中设置而不是在行中设置:
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
这样做的原因是什么?在twitter API指南中指定标题的以下实现:
POST /1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Authorization:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.twitter.com
status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
答案 0 :(得分:0)
客户端可以添加HTTP Expect标头来告诉服务器“嘿,我希望你以某种方式行事”。出于某种原因,Twitter的实施希望你什么都不期待。我用自己的本土实现遇到了这个问题。我不确定为什么Twitter想要这个标题。
您可以在POST变量或标题中显示您的凭据和签名。只要设置了正确的变量(oauth_consumer_key,oauth_nonce,oauth_signature,oauth_signature_method,oauth_timestamp和oauth_token),两者都会起作用。
我发现将Authorization标头设置得更清晰,因为它不依赖于请求方法(GET,POST,PUT等)。但Twitter处理这两种情况都很好。如果这就是他们在库中实现它的方式,那就这样吧。