使用Dispatch执行简单的HTTP GET

0__*_*0__ 4 scala http scala-dispatch

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

http://www.freesound.org/api/sounds/search/?q=barking&api_key=074c0b328aea46adb3ee76f6918f8fae
Run Code Online (Sandbox Code Playgroud)

产生一个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", 
 ...
Run Code Online (Sandbox Code Playgroud)

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

scalaVersion := "2.10.0"

libraryDependencies += "net.databinder.dispatch" %% "dispatch-core" % "0.9.4"
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

res0: dispatch.Promise[String] = Promise(!Unexpected response status: 301!)
Run Code Online (Sandbox Code Playgroud)

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

Tra*_*own 13

您可以使用执行程序configure上的方法启用重定向Http:

Http.configure(_ setFollowRedirects true)(q OK as.String)
Run Code Online (Sandbox Code Playgroud)

你也可以拉Location出来的301人工响应,但是这将是少了很多方便.