0

我试图通过试验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
4

1 回答 1

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 处理这两种情况都很好。如果这就是他们在图书馆中实现它的方式,那就这样吧。

于 2013-04-28T20:51:24.763 回答