REST API - 适用于chrome但curl不起作用

时间:2013-10-18 14:21:25

标签: http google-chrome curl

我正在使用网络服务API。 http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&user_id=&expire=&token=&sid=&h=&channel=1&type=n

将该地址键入chrome,预期结果(包含歌曲信息的json文件)可能会返回,但使用curl时失败。 (在这两种情况下,响应代码都可以,但在后面的情况下响应正文不正确)

以下是使用Chrome开发者工具转储的请求信息:

Request URL:http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&user_id=&expire=&token=&sid=&h=&channel=7&type=n
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:bid="lwaJyClu5Zg"
Host:www.douban.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Query String Parametersview sourceview URL encoded
app_name:radio_desktop_win
version:100
user_id:
expire:
token:
sid:
h:
channel:7
type:n

但是,将该API与curl一起使用,即curl http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&user_id=&expire=&token=&sid=&h=&channel=7&type=n将不会返回预期的结果。

甚至指定从Chrome转储的文件仍然失败。

curl -v -H "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Accept-Encoding:gzip,deflat,sdcn" -H "Accept-Language:zh-CN,zh;q=0.8" -H "Cache-Control:max-age=0" -H "Connection:keep-alive"  -H "Host:www.douban.com" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36" http://www.douban.com/j/app/radio/people?app_name=radio_desktop_win&version=100&user_id=&expire=&token=&sid=&h=&channel=7&type=n

以下是来自curl的-v打印出来的内容。似乎所有内容都与Chrome提出的请求相同,但响应正文仍然不正确。

  

GET / j / app / radio / people?app_name = radio_desktop_win HTTP / 1.1   用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_5)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 30.0.1599.101 Safari / 537.36   接受:text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP, / 的; Q = 0.8   接受编码:gzip,通货紧缩,SDCN   接受语言:ZH-CN,ZH; Q = 0.8   缓存控制:最大年龄= 0   连接:保持活跃   主机:www.douban.com

为什么会这样?感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

你需要在shell中的引号周围放置引号。否则&会导致麻烦。

另一个常见问题:您可能在Chrome中使用HTTP代理。如果是这样,您还需要告诉curl这个代理。您可以通过设置环境变量http_proxy来完成此操作。