如何在clj-http中包装oAuth标头?

时间:2015-05-15 15:26:32

标签: oauth clojure twitter-oauth clj-http

我尝试使用clojure发布Twitter状态更新...但这可能是关于oAuth标头的问题,并通过精彩的clj-http库使用它。

我之前使用过clj-http用于basic-auth和其他类型的标题,这非常简单。 Authorization: Bearer ...有点令人困惑,但我最终到了那里。

对于Twitter,我应该在授权中传递很多变量,我不太确定我是如何去做的。根据推特,这里的curl命令,我需要发布推文:

curl --request 'POST' 'https://api.twitter.com/1.1/statuses/update.json' 
     --data 'status=this+is+sparta' 
     --header 'Authorization: OAuth oauth_consumer_key="xxxxx",
                              oauth_nonce="xxxxx", 
                              oauth_signature="xxxxx", 
                              oauth_token="xxxxx", oauth_version="1.0"' 
     --verbose

所以我不确定如何将所有oAuth...内容添加到标题中。尝试使用(str ..)并不是很有效。这是我到目前为止所得到的:

(client/post "https://api.twitter.com/1.1/statuses/update.json")
             {:headers {:Authorization (str "OAuth oauth_consumer_key='xxxxx', oauth_nonce='xxxxx', oauth_signature='xxxxx', oauth_token='xxxxx', oauth_version='1.0'" )}
              :form-params {:status "This is sparta"})

我尝试时会返回403.权限错误。

关于我如何构建该查询的任何想法?

ps:我确实拥有该帐户的oAuth tokentoken_secret ...但我注意到token_secret值未被传递?以及oauth_nonce的用途是什么?我现在正在传递twitter给我卷曲的价值......环顾四周似乎它只是一个随机值,所以不是那么慌张。

2 个答案:

答案 0 :(得分:3)

可能值得一看Matt Revelle的Clojure OAuth客户端库。 https://github.com/mattrepl/clj-oauth

OAuth非常简单,无法将裸骨上的东西整合在一起。如果没有别的,你仍然想要走最小的路线,你可能会得到一些想法。

答案 1 :(得分:2)

我在过去尝试使用clj-oauth时遇到了困难(主要是因为我对clojure的理解),但我发现twitter-api非常简单易用。它在内部使用了clj-oauth。