我正在尝试为网络服务器写一个中间人(为了增加额外的服务,而不是出于各种原因。
我正在尝试传递一个Host
标题,因为后端在{$ 1}}标题中提取了它的地址。不可预知的地方。
原始代码是数百行,所以我把它简化为这里的显着部分。
Host
当我运行此代码时,我希望将import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
opener.addheaders.append(('Host','fakedomain.net'))
res = opener.open('http://www.google.com/doodles/finder/2014/All%20doodles')
res.read()
传递给Google的服务器。但是,调试代码清楚地显示Host: fakedomain.net
。将Host: www.google.com\r\n
更改为Host
可以正常工作。
使用开启者发送HostX
标头的正确方法是什么?
注意:这是一种简化;在实际代码中,我指向我自己的服务器等 - 这是一个简化。
答案 0 :(得分:3)
使用urllib2.Request
,
import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
req = urllib2.Request('http://www.google.com/doodles/finder/2014/All%20doodles')
req.add_unredirected_header('Host', 'fakedomain.net')
res = opener.open(req)
res.read()
答案 1 :(得分:0)
感谢Satoru让我走上了正确的轨道,几乎就是我想要的,并且肯定让我走上了正确的轨道。
正确答案是:
import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
req = urllib2.Request('http://www.google.com/doodles/finder/2014/All%20doodles',None,{"Host":"fakedomain.net"})
res = opener.open(req)
res.read()
对不起Satoru,我不想选择你的答案是正确的,以防其他人发现我的问题,但我已经投了赞成票。