【发布时间】:2012-03-02 23:11:40
【问题描述】:
我尝试使用 urllib2 执行一个简单的 POST 请求。
然而,服务器响应表明它接收到一个简单的 GET。我检查了传出请求的类型,但它设置为 POST。
为了检查服务器的行为是否像我期望的那样,我尝试使用连接到 url 的(前 POST-)数据执行 GET 请求。这得到了我预期的答案。
有人知道我误解了什么吗?
def connect(self):
url = 'http://www.mitfahrgelegenheit.de/mitfahrzentrale/Dresden/Potsdam.html/'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
header = { 'User-Agent' : user_agent }
values = {
'city_from' : 69,
'radius_from' : 0,
'city_to' : 263,
'radius_to' : 0,
'date' : 'date',
'day' : 5,
'month' : 03,
'year' : 2012,
'tolerance' : 0
}
data = urllib.urlencode(values)
# req = urllib2.Request(url+data, None, header) # GET works fine
req = urllib2.Request(url, data, header) # POST request doesn't not work
self.response = urllib2.urlopen(req)
这似乎是一个像这里讨论的问题:Python URLLib / URLLib2 POST 但我很确定在我的情况下,尾部斜杠没有丢失。 ;)
我担心这可能是一个愚蠢的误解,但我已经想了好几个小时了!
编辑:打印的便利功能:
def response_to_str(response):
return response.read()
def dump_response_to_file(response):
f = open('dump.html','w')
f.write(response_to_str(response))
编辑 2:分辨率:
我找到了一个工具来捕捉与网站的真实互动,http://fiddler2.com/fiddler2/。显然,服务器从输入表单中获取数据,重定向几次,然后使用简单地附加到 url 的数据发出 GET 请求。
urllib2 一切正常,我为滥用您的时间而道歉!
【问题讨论】:
-
但是您期望的答案是什么?你怎么确定这不是服务器端问题?
-
我希望您可以通过删除第 19 行的注释来观察到的行为(当然,注释掉第 20 行)。因为这让我得到了我想要的东西,所以我假设服务器工作正常。准确地说,我想在 3 月 5 日接收从德累斯顿到波茨坦的所有游乐设施,但我却在系统中获得了所有游乐设施。
-
你也可以发布服务器端代码吗?
-
很遗憾没有,因为我无权访问它。
-
可能服务器不接受
POST对该页面的请求。
标签: python urllib2 http-request