使用Dispatch执行简单的HTTP GET请求

4
以下是浏览器(如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控制台,我执行以下操作:

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!)

那么我做错了什么?这里是API文档,如果有帮助的话。


q OK as.String打印的是什么?(另外,你确实知道301是“永久移动”代码,对吧?) - Rex Kerr
@rex (http://www.freesound.org/api/sounds/search GET,dispatch.OkFunctionHandler @ 7fc4fe21)。我对HTTP没有很好的了解,但如果我在浏览器中输入网址,它就能完美地工作。 - 0__
1个回答

13
您可以使用Http执行器上的configure方法启用重定向跟随功能:
Http.configure(_ setFollowRedirects true)(q OK as.String)

你也可以手动从 301 响应中提取出 Location,但这会非常不方便。


太好了,感谢Rex和Travis;我不知道这个重定向是如何工作的,但这个解决方案有效! - 0__
1
一个服务器X给了我一个重定向(状态码302),并且还发送了几个cookies。这行代码很好用:我被重定向并且我发送了正确的cookies。然而,我失去了随着重定向发送的cookies的信息:有没有一种方法可以获取它们(除了手动处理重定向之外)? - JohnCastle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接