Найти - Пользователи
Полная версия: urllib2.HTTPError: HTTP Error 302
Начало » Network » urllib2.HTTPError: HTTP Error 302
1
Skyler
Сайт http://kinopoisk.ru редиректит адрес сам на себя (т.е. редирект идет на kinopoisk.ru), из зачего крашится мой скрипт. Я не могу открыть страницу.
Вот что я пробывал:
br = mechanize.Browser()
br.set_handle_refresh(False)
br.set_debug_redirects(True)
br.open(url)
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler())
urllib2.install_opener(opener)
site = opener.open(url)
Ничего не выходит. Google толкого решения не подсказал.
Можно ли эту проблему как-нибудь решить?
Вот ошибка:
Traceback (most recent call last):
File “./kinopoisk.py”, line 31, in <module>
kinopoisk.search('Jumper')
File “./kinopoisk.py”, line 21, in search
site = opener.open(url)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 587, in http_error_302
self.inf_msg + msg, headers, fp)
urllib2.HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Found
P.S. По ходу не в тот раздел запостил :/
diam123
А как его тогда браузер открывает, если он сам на себя редиректит ?
igor.kaist
В соседней ветке обсуждали 302, там я линку приводит на код, который обрабатывает редирект.
Cristian
igor.kaist, тот код просто игнорирует редирект. А нужно, чтобы скрипт, наоборот, по нему переходил. Почему urllib2 этого не делает автоматически - не понятно.

Может, кто подскажет как это правильно реализовать?
pasaranax
Насколько я понял, сайт kinopoisk.ru редиректит на www.kinopoisk.ru, попробуй сразу с www. указывать. Проверял браузером, если с urllib он себя не так ведет, то можно попробовать сменить user agent.
Cristian
Пробовал. С www.kinopoisk.ru редиректит на error.kinopoisk.ru, там пытается установить куку сессии и редиректит обратно на www.kinopoisk.ru.

Фишка в том, что я в настройках Оперы отключал прием кук, отправку личных данных и автоматический редирект. И сайт, все-равно, открывался.

Даже в php, через curl, все работает без лишних телодвижений. А в python'e, urllib2 ни в какую не хочет обрабатывать редирект самостоятельно.
Cristian
Собственно, все оказалось банально просто. pasaranax, спасибо за подсказку.

Все что нужно, это передать в заголовках user agent. Хоть я и пробовал это раньше, но, видимо, где-то еще допустил ошибку (второй день с питоном работаю).

Если user agent не передавать, то сервер уходит в бесконечный редирект, о чем и сообщает urllib2 (зря грешил на эту библиотеку).
urllib2.HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
Вот рабочий пример:
import urllib2

req = urllib2.Request('http://www.kinopoisk.ru');
req.add_header('User-Agent', 'Opera/9')
f = urllib2.urlopen(req)
print f.read()
pavlov99
Всем добрый день!
С чем может быть связано, что при замене
req.add_header('User-Agent', ‘Opera/9’)
на
req.add_header('User-Agent', ‘'Mozilla/5.0’')
опять появляется редирект?
pavlov99
Нужно, как не странно, писать
req.add_header('User-Agent', ''Firefox/3.5.8'').
qman
Подскажите пожалуйста http://www.python.su/forum/viewtopic.php?pid=46033#p46033
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB