
代码
... >>> h = {"Content-Type": "application/json"} >>> req = urllib2.Request(url,js,h) >>> req.has_header("Content-Type") False >>> req.get_header("Content-type") 'application/json' key 被 capitalize 了,我这个 header 就要 Content-Type 的,怎么搞?
1 upczww 2016-10-12 09:58:21 +08:00 via Smartisan T1 你应该试试 requests. HTTP for Humans. |
2 shadowmydx 2016-10-12 10:30:45 +08:00 这个很简单,这个 header 是 Request 对象中一个叫 headers 的成员,如果一定要大写,你直接这么写就可以: h = {"Content-Type": "application/json"} req = urllib2.Request(url, js, headers=h) req.headers = h print req.has_header("Content-Type") print req.get_header("Content-Type") |
3 ethsol OP @shadowmydx 可以了,但是为什么要额外加 req.headers = h |
5 ThinkCat 2016-10-12 10:55:19 +08:00 你应该用下 requests , 这个真心好用 |
6 ryd994 2016-10-12 11:03:42 +08:00 via Android 因为 HTTP 协议本来就规定 header 不分大小写: https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 |
7 ubear1991 2016-10-12 13:16:26 +08:00 用 requests |
8 TKKONE PRO 看到那么多人推荐 requests ,我就放心了。 还是用 requests 吧,妥妥的 |
9 ethsol OP 已用 requests ,妥妥的 |
10 jixiangqd 2016-10-12 15:10:41 +08:00 试过 requests 并发性能不是很好。。。不知道为什么 |
11 qweweretrt515 2016-10-12 19:37:15 +08:00 requests 啊 |
12 sherwinkoo 2016-10-12 19:53:46 +08:00 @jixiangqd 你怎么测试的? |
13 jixiangqd 2016-10-12 19:59:59 +08:00 @sherwinkoo 试过自带进程池、线程池模块、 gevent 协程:都是 urllib2 性能最好,差的还不是一点半点。不知道是不是有什么配置可以改进并发性能,没有深入研究 |
14 purrgil 2016-10-13 03:25:43 +08:00 life is short,you neet requests |
15 purrgil 2016-10-13 03:29:56 +08:00 Life is short,you need requests. |
16 ibigbug 2016-10-13 03:54:59 +08:00 rfc 是规定 http header 不区分大小写的,你可能无语错地方了 |
17 shadowmydx 2016-10-13 12:19:16 +08:00 @zong400 因为 urlib2 在构建 Request 对象时对你传入的参数进行了统一的处理,其中,处理 header 后,将其赋予一个成员变量 headers 。因此,你只需要重新替换掉这个成员就可以了。 |
18 chy373180 2016-10-13 13:02:08 +08:00 requests 何来的并发性能不是很好。。。 |