如何将 oAuth headers 包装在 clj-http 中?

How to wrap oAuth headers in clj-http?

我正在尝试 post 使用 clojure 更新 Twitter 状态...但这可能真的是关于 oAuth headers 的问题,并通过精彩的 clj-http图书馆。

我之前用 clj-http 来表示 basic-auth 和其他类型的 header,这非常简单。 Authorization: Bearer ... 有点混乱,但我最终做到了。

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

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

所以我不确定如何在 header 中附加所有 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"})

这个returns 403. permission error when I try.

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

ps:我确实有帐户的 oAuth tokentoken_secret...但是我注意到 token_secret 值没有被传递? oauth_nonce 有什么用?我现在正在传递 twitter 给我的 curl 值...环顾四周,它似乎只是一个随机值,所以不必大惊小怪。

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

OAuth 非常重要,以至于从简单的骨骼中拼凑一些东西变得很烦人。如果不出意外,你还是想走最小的路线,你可能会得到一些想法。

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