Я пытаюсь выполнить простой POST-запрос с помощью urllib2.
Однако ответ сервера указывает, что он получает простой GET. Я проверил тип исходящего запроса, но он установлен на POST.
Чтобы проверить, ведет ли сервер себя так, как я ожидал, я попытался выполнить запрос GET с (прежними POST-) данными, соединенными с URL. Это дало мне ответ, который я ожидал.
Кто-нибудь знает, что я неправильно понял?
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/. Видимо, сервер берет данные из формы ввода, перенаправляет несколько раз, а затем делает запрос GET с этими данными, просто добавляемыми в URL.
С urllib2 все в порядке, и я прошу прощения за неправильное использование вашего времени!