请求同一个网址, requests 和 urllib2 返回的 headers 内容不同?

2017-01-14 17:12:10 +08:00
 dofine

urllib2:

Date: XXX
Server: Apache
Last-Modified: XXX
Accept-Ranges: bytes
Content-Length: 12345678
Vary: Accept-Encoding
Connection: close
Content-Type: text/plain

requests:

Content-Encoding: gzip
Accept-Ranges: bytes
Vary: Accept-Encoding
Keep-alive: timeout=5, max=128
Last-Modified: XXX
Connection: Keep-Alive
ETag: xxxxxxxxx
Content-Type: text/plain

为何 requests 少了 content-length ?其它发送请求的设置是完全一样的。。 requests 和 Chrome 开发者工具查看到的一致。但是这里我又需要 content-length 的值(为了断点续传)

3589 次点击
所在节点    Python
15 条回复
redhatping
2017-01-14 17:18:47 +08:00
看官方文档
binux
2017-01-14 17:20:43 +08:00
Content-Length 不应该手动设置
dofine
2017-01-14 17:24:10 +08:00
@binux 我描述不清~~上边给出的结果是响应的 header ,我的意思是需要知道当前 content-length 的值。。但是 requests 的返回里面没有。。 urllib2 就有。。
@redhatping 文档已经看了许多遍了。。怀疑是服务器的问题?
hahastudio
2017-01-14 17:25:47 +08:00
你这是结果,肯定还是因为你发送的请求不一样
Lonely
2017-01-14 17:36:14 +08:00
你把代码也贴出来啊……
dofine
2017-01-14 17:37:59 +08:00
{'Range': 'bytes=0-', 'Authorization': 'Basic XXX'}

手动加了这个 header , urllib2 和 requests 返回的 ETag 都是一样的啊。。为什么会发送请求不一样呢。。 @hahastudio
dofine
2017-01-14 17:40:06 +08:00
```
import os
import urllib2
import requests

url = 'exmaple.com'
headers = {
"Authorization": "Basic xxxx",
"Range": "bytes=0-"
}
req = urllib2.Request(url, headers=headers)
resp = urllib2.urlopen(req)
print resp.info()

r = requests.get(url, headers=headers)
print r.headers
assert resp.info()['ETag'] == r.headers['ETag']
```
dofine
2017-01-14 17:42:28 +08:00
@Lonely 贴在楼上了。。我发现我都不在回复里贴代码了。。
lhbc
2017-01-14 17:45:03 +08:00
明显你的 request header 不一样
hahastudio
2017-01-14 17:45:36 +08:00
dofine
2017-01-14 17:51:02 +08:00
@hahastudio 开始就使用的文档里的方法,结果跟换成手动设置 auth 一样的。。
lbp0200
2017-01-14 17:55:21 +08:00
试试随机 ua
dofine
2017-01-14 17:57:34 +08:00
谢谢大家。。
dsg001
2017-01-14 19:10:06 +08:00
抓包看看发送的请求有木有区别
qgy18
2017-01-14 23:11:08 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/334596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX