请教一下, HttpConnection 和 urlopen 在处理 URL 时,有什么不同的地方吗?

2016-09-08 16:46:39 +08:00
 twlsoft

主要场景是这样的,我有一段 URL ,用于对百度贴吧进行签到

使用 HttpConnection 的代码如下:

conn = http.client.HTTPConnection('tieba.baidu.com', 80)
conn.request('GET', '/mo/q---{0}/sign?tbs={1}&fid={2}&kw={3}'.format(urllib.parse.quote(BAIDUID, 'utf-8'), tbs, fid, urllib.parse.quote(tieba, 'utf-8')))

resp = conn.getresponse()

使用 urlopen 的例子如下

url = 'http://tieba.baidu.com/mo/q---{0}/sign?tbs={1}&fid={2}&kw={3}'.format(urllib.parse.quote(BAIDUID, 'utf-8'), tbs, fid, urllib.parse.quote(tieba, 'utf-8'))
urllib.request.urlopen(url)

两个 URL 地址是完全一样的,然而使用 HttpConnection 的情况下,虽然返回的 code 是 200 ,同时 read 出来的也是正常打开贴吧的源代码,可是贴吧却没有签到成功, 可是使用 urlopen 这个方式却签到成功了。

请问下各位,这是什么原因导致的呢?

1656 次点击
所在节点    Python
5 条回复
q397064399
2016-09-08 18:56:50 +08:00
建议用 fiddler4 抓包看看是不是 useragent 有区别,最好还是分析下 http 报文 http 报文还是很好懂的
q397064399
2016-09-08 18:59:09 +08:00
我猜测是 useragent 的原因
binux
2016-09-08 19:22:19 +08:00
为什么要这么折磨自己?
twlsoft
2016-09-09 09:24:26 +08:00
@q397064399 嗯嗯,明白,我去试一试~谢谢~~
twlsoft
2016-09-09 09:24:50 +08:00
@binux 啊?什么意思呢?

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

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

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

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

© 2021 V2EX