在Scala Dispatch 0.9.5中插入Oauth头的方法?

时间:2013-03-07 02:22:33

标签: scala http http-headers scala-dispatch

使用相当简单优雅的Scala Dispatch HTTP库。由于Twitter Search API现在使用OAuth 1.0A,我显然需要开始注入Consumer和AccessToken信息。我在下面有一个简单的请求:

val request = url("https://api.twitter.com/1.1/search/tweets.json?q=%23%sresult_type=mixed&count=4" format w.queryValue)
val response = Http(request OK as.String)

如果我已经知道我的Consumer和AccessToken信息,有什么方法可以为此添加标题?文档相当稀缺。谢谢!

2 个答案:

答案 0 :(得分:1)

我不熟悉OAuth API,但Dispatch允许您使用<:<方法/运算符添加任意HTTP请求标头。

将上面的代码示例和Twitter的开发者网站上的这个"Authorizing a request"示例混合在一起,您可能会得到类似的结果:

val authentication = """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""""

val request = url("https://api.twitter.com/1.1/search/tweets.json?q=%23%sresult_type=mixed&count=4" format w.queryValue)
val authHeader = Map("Authentication" -> authentication) 
val requestWithAuthentication = request <:< authHeader
val response = Http(requestWithAuthentication OK as.String)

我还没有确认这是否真的有效,但希望它能让你朝着正确的方向前进。

答案 1 :(得分:0)

我这样做是为了发送:

private def buildSearchReq(searchTerm: String, lat: Double, long: Double): Req = {
  val consumer = new ConsumerKey(consumerKey, consumerSecret)
  val requestToken = new RequestToken(token, tokenSecret)
  val req = url(searchUrl)
    .addQueryParameter("term", searchTerm)
    .addQueryParameter("radius_filter", "40000")
    .addQueryParameter("ll", s"$lat,$long")
  new SigningVerbs(req).sign(consumer, requestToken)
}

如果你愿意,你也可以做更多这样的事情:

private def buildSearchReq(searchTerm: String, lat: Double, long: Double): Req = {
  val req = url(searchUrl) <<? Map("term" -> searchTerm, "radius_filter" -> "40000", "ll" -> s"$lat,$long")
  new SigningVerbs(req).sign(new ConsumerKey(consumerKey, consumerSecret), new RequestToken(token, tokenSecret))
}

可能还有更简洁的方法,但你明白了。