Curl返回与Web浏览器不同的JSON

时间:2017-07-26 09:59:20

标签: json curl

我的curl请求有问题。我从Web服务器获取(通过GET请求)JSON,它在我的Web浏览器中运行得非常好。但是当我从curl(或我的ruby代码)中获取它时,我的JSON的某些值是空的(它们不在我的浏览器中)。这让我失去了很多不可接受的数据。有没有人知道是什么让这种情况发生的? 我已经尝试更改用户代理(见下文),但仍然会给出相同的结果。

curl "http://..../path/to/json"

curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" "http://..../path/to/json"

给出相同的结果。

编辑:我尝试从Safari复制curl请求(见下文),它给出了相同的缺失值。但是Chrome会显示与curl相同的结果。

curl 'https://path/to/json' -XGET -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4'

2 个答案:

答案 0 :(得分:0)

我猜你的浏览器可能忽略了内容长度标题,并且只是在连接关闭之前一直保持读取。 curl默认情况下并不是这样(可能出于性能原因,因为在删除连接之前读取速度可能要慢很多),并且一旦读取了内容长度字节就停止读取。并且您的目标Web服务器被窃听,并发送错误的长度。你可以通过--ignore-content-length开关告诉curl忽略标题并读取所有内容。

另一种可能性是,您正在阅读卷曲的网页,以某种方式用javascript填充空白?

另一种可能性是,如果没有首先使用http会话cookie,则不会从目标服务器显示完整的json?

答案 1 :(得分:0)

似乎问题来自于响应是根据浏览器的语言自定义的事实。所以在法语中,json已经满了,而且在英语中有些字段缺失......

相关问题