【问题标题】:Performing a simple HTTP GET with Dispatch使用 Dispatch 执行简单的 HTTP GET
【发布时间】:2012-12-30 14:36:38
【问题描述】:

以下是浏览器(例如 Firefox)中的有效查询:

http://www.freesound.org/api/sounds/search/?q=barking&api_key=074c0b328aea46adb3ee76f6918f8fae

生成 JSON 文档:

{
    "num_results": 610, 
    "sounds": [
        {
            "analysis_stats": "http://www.freesound.org/api/sounds/115536/analysis/", 
            "analysis_frames": "http://www.freesound.org/data/analysis/115/115536_1956076_frames.json", 
            "preview-hq-mp3": "http://www.freesound.org/data/previews/115/115536_1956076-hq.mp3", 
            "original_filename": "Two Barks.wav", 
            "tags": [
                "animal", 
                "bark", 
                "barking", 
                "dog", 
                "effects", 
 ...

我正在尝试使用Dispatch 0.9.4 执行此查询。这是build.sbt

scalaVersion := "2.10.0"

libraryDependencies += "net.databinder.dispatch" %% "dispatch-core" % "0.9.4"

来自sbt console,我执行以下操作:

import dispatch._
val q = url("http://www.freesound.org/api/sounds/search")
   .addQueryParameter("q", "barking")
   .addQueryParameter("api_key", "074c0b328aea46adb3ee76f6918f8fae")
val res = Http(q OK as.String)

但承诺总是以以下错误完成:

res0: dispatch.Promise[String] = Promise(!Unexpected response status: 301!)

那我做错了什么? Here is the API documentation 以防万一。

【问题讨论】:

  • q OK as.String 打印什么? (另外,你知道 301 是“永久移动”的代码,对吧?)
  • @rex (http://www.freesound.org/api/sounds/search GET,dispatch.OkFunctionHandler@7fc4fe21)。我对 HTTP 不太了解,但是如果我将 url 放在浏览器中,它就可以完美地工作。

标签: scala http scala-dispatch


【解决方案1】:

您可以在Http 执行器上使用configure 方法启用重定向跟踪:

Http.configure(_ setFollowRedirects true)(q OK as.String)

您也可以手动将Location301 响应中拉出,但这会不太方便。

【讨论】:

  • 太好了,谢谢 Rex 和 Travis;我不知道这个重定向是如何工作的等等,但是这个解决方案有效!
  • 服务器 X 给了我一个重定向(状态码 302)并且还给我发送了几个 cookie。这行代码效果很好:我被重定向并发送了正确的 cookie。不过,我丢失了与重定向一起发送的 cookie 的信息:有没有办法获取它们(除了手动处理重定向?)
猜你喜欢
  • 1970-01-01
  • 2015-11-10
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多