Python 为什么我的主机头不工作?

Python 为什么我的主机头不工作?,python,Python,我试图为一个Web服务器写一个中间人(为了添加额外的服务,而不是出于邪恶的原因) 我试图传递一个主机头,因为后端put的it地址取自主机头,在很多不可预测的地方都会出现 原始代码有数百行,因此我将其简化为此处的主要部分 导入urllib2 opener=urlib2.build\u opener(urlib2.HTTPHandler(debuglevel=1)) append(('Host','fakedomain.net')) res=开启器。开启('http://www.google.com

我试图为一个Web服务器写一个中间人(为了添加额外的服务,而不是出于邪恶的原因)

我试图传递一个
主机
头,因为后端put的it地址取自
主机
头,在很多不可预测的地方都会出现

原始代码有数百行,因此我将其简化为此处的主要部分

导入urllib2
opener=urlib2.build\u opener(urlib2.HTTPHandler(debuglevel=1))
append(('Host','fakedomain.net'))
res=开启器。开启('http://www.google.com/doodles/finder/2014/All%20doodles')
决议草案(见附件)
当我运行此代码时,我希望
Host:fakedomain.net
被传递到google的服务器。但是,调试代码清楚地显示
Host:www.google.com\r\n
。将
Host
更改为
HostX
效果良好

使用开场白发送
主机:
标题的正确方式是什么


注意:这是一个简化;在实际代码中,我指向我自己的服务器,等等。这是一个简化。

使用
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()

使用
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()

使用
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()

使用
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()

多亏了萨托鲁,他让我走上了正确的轨道,这几乎就是我一直在寻找的东西,当然也让我走上了正确的轨道

正确答案是:

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,我不想选择正确的答案,以防其他人发现我的问题,但我已经投了更高的票。

多亏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,我不想选择正确的答案,以防其他人发现我的问题,但我已经投了更高的票。

多亏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,我不想选择正确的答案,以防其他人发现我的问题,但我已经投了更高的票。

多亏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,我不想选择正确的答案,以防其他人发现我的问题,但我已经投了更高的票。

这是我运行您的代码片段时看到的:这正是我看到的。在第一行,上面写着
主机:www.google.com\r\n
我希望看到
主机:fakedomain.net\r\n
。可能是重复的我在写这个问题之前的搜索中发现了这一点。我想做与page相同的事情,但使用
urllib2.build\u opener(…).open(…)
。如果您想知道为什么,因为这是一个http代理,我有一个打开程序,它不遵循重定向,而是返回它。我将重定向传递回浏览器,以便浏览器知道URL已更改。这是我在运行您的代码段时看到的:这正是我看到的。在第一行,它说
Host:www.google.com\r\n
我希望看到
主机:fakedomain.net\r\n
。在写这个问题之前,我在搜索中发现了可能的重复项。我想做与page相同的事情,但使用
urlib2.build\u opener(…).open(…)
。如果您想知道为什么,因为这是一个http代理,我有一个打开程序,它不遵循重定向,而是返回它。我将重定向传递回浏览器,以便浏览器知道URL已更改。这是我在运行您的代码段时看到的:这正是我看到的。在第一行,它说
Host:www.google.com\r\n
我希望看到
主机:fakedomain.net\r\n
。在写这个问题之前,我在搜索中发现了可能的重复项。我想做与page相同的事情,但使用
urlib2.build\u opener(…).open(…)
。如果您想知道为什么,因为这是一个http代理,我有一个打开程序,它不遵循重定向,而是返回它。我将重定向传递回浏览器,以便浏览器知道URL已更改。这是我在运行您的代码段时看到的:这正是我看到的。在第一行,它说
Host:www.google.com\r\n
我希望看到
主机:fakedomain.net\r\n
。在写这个问题之前,我在搜索中发现了可能的重复项。我想做与page相同的事情,但使用
urlib2.build\u opener(…).open(…)
。如果您想知道为什么,因为这是一个http代理,我有一个打开程序,它不遵循重定向,而是返回重定向。我将重定向传递回浏览器,以便浏览器知道URL已更改。