2013-04-21 98 views
0

我正在尝试模拟Gmail请求。基本上我打算获取所有json响应。使用curl模拟Gmail请求

当您在Gmail中点击Themes -> Change you background image时,您会看到一个可从中选择图片的picasa精选图库。我设法得到请求POST字符串gmail使用获取更多的图像使用chrome developer tools -> Network -> XHR。我将这个请求复制为curl。

curl "https://mail.google.com/picker/pvr?hl=en&native=1&hostId=gm-theme" -H ":host: mail.google.com" -H ":version: HTTP/1.1" -H "origin: https://mail.google.com" -H "accept-encoding: gzip,deflate,sdch" -H "accept-language: en-US,en;q=0.8" -H "content-control: no-cache" -H "cookie: GMAIL-COOKIES" -H "content-length: 257" -H ":path: /picker/pvr?hl=en&native=1&hostId=gm-theme" -H "accept-charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3" -H "user-agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" -H "content-type: application/x-www-form-urlencoded;charset=UTF-8" -H "accept: */*" -H "referer: https://mail.google.com/_/mail-static/_/js/main/m_i,t/rt=h/ver=NB-HmMH_MVQ.en./sv=1/am=!JjrcIo7GA7b0RPF-I9tbYvMmngnebTyl_O_8x6inji58opxSrbuft8sKd6tLvMR8EoLV76U/d=1?random=1366542355442" -H "x-same-domain: explorer" -H ":scheme: https" -H ":method: POST" --data "start=2050&numResults=50&sort=3&desc=true&data=0&view=2&service=picasa&type=featured&options=%7B%22excludeLabels%22%3Anull%7D&token=MY-TOKEN&version=4&subapp=5&app=2&clientUser=16140887335626099390&authuser=0" 


当我在卷曲运行此,代替接收JSON文件I接收混淆/加密文本,例如:link

为什么响应不是JSON文本这样的:link

回答

1

结果是一样的,你只是忘了解压缩结果。如果我将abc.json重命名为abc.json.gz并提取abc.json,我会得到一个与normal.json相同的结果。

normal.json

&&&START&&&{"response":{"cursor":"2100","docs":[{"attrs":{"ut":1.20922026E12}... 

abc.json(解压缩后):

&&&START&&&{"response":{"cursor":"50","docs":[{"attrs":{"ut":1.364824967E12}... 
+0

它被压缩的原因是因为服务器被告知,3种不同类型的压缩响应是可以接受的:'-H“accept-encoding:gzip,deflate,sdch”'。为了避免压缩,可以用下面的代码:'-H“accept-encoding:identity”',或者完全省略标题。 – 2013-04-21 15:24:01

+0

@RemyLebeau我从来没有注意到“身份”,但很高兴知道。有关'Accept-Encoding'的更多信息可以在[RFC 2616 section 14.3](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3)中找到。 – rekire 2013-04-21 15:27:31

+0

或者改变curl命令行来省略手动'accept-encoding'头文件,而是使用curl自己的'-compressed'参数来替代,以便它可以为你解压缩数据。一些正在使用的手动标题具有本地卷曲equivilents应该使用,而不是。 – 2013-04-21 15:28:30