Portál AbcLinuxu, 12. května 2025 06:33

Dotaz: Python a HTTP Error 302

27.5.2009 09:58 Dunric | skóre: 21
Python a HTTP Error 302
Přečteno: 479×
Odpovědět | Admin
Nevím co dělám špatně, ale nedaří se mi z pythonu poslat úspěšně HTTP požadavek na justice.cz . Vrací mi to chybu č. 302, nekonečné přesměrování (viz níže). Stránky se občas přesměrovávají na sebe sama kvůli nastavení cookie, ale obsluhu jak pro cookies tak pro přesměrování v openeru mám.

Stejný řetězec předhozený wgetu nebo firefoxu neskončí chybou 302, vrátí správnou výslednou stránku.

dunric@darkstar:~/projects$ python insolv.py
Traceback (most recent call last):
  File "insolv.py", line 22, in <module>
    result = myopener.open( myurl+'?', data=mydata )
  File "/usr/lib/python2.5/urllib2.py", line 381, in open
    response = self._open(req, data)
  File "/usr/lib/python2.5/urllib2.py", line 399, in _open
    '_open', req)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 675, in <lambda>
    meth(r, proxy, type))
  File "/usr/lib/python2.5/urllib2.py", line 698, in proxy_open
    return self.parent.open(req)
  File "/usr/lib/python2.5/urllib2.py", line 387, in open
    response = meth(req, response)
  File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.5/urllib2.py", line 419, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 582, in http_error_302
    return self.parent.open(new)
  File "/usr/lib/python2.5/urllib2.py", line 381, in open
    response = self._open(req, data)
  File "/usr/lib/python2.5/urllib2.py", line 399, in _open
    '_open', req)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 675, in <lambda>
    meth(r, proxy, type))
  File "/usr/lib/python2.5/urllib2.py", line 698, in proxy_open
    return self.parent.open(req)
  File "/usr/lib/python2.5/urllib2.py", line 387, in open
    response = meth(req, response)
  File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.5/urllib2.py", line 419, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 582, in http_error_302
    return self.parent.open(new)
  File "/usr/lib/python2.5/urllib2.py", line 381, in open
    response = self._open(req, data)
  File "/usr/lib/python2.5/urllib2.py", line 399, in _open
    '_open', req)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 675, in <lambda>
    meth(r, proxy, type))
  File "/usr/lib/python2.5/urllib2.py", line 698, in proxy_open
    return self.parent.open(req)
  File "/usr/lib/python2.5/urllib2.py", line 387, in open
    response = meth(req, response)
  File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.5/urllib2.py", line 419, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 582, in http_error_302
    return self.parent.open(new)
  File "/usr/lib/python2.5/urllib2.py", line 381, in open
    response = self._open(req, data)
  File "/usr/lib/python2.5/urllib2.py", line 399, in _open
    '_open', req)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 675, in <lambda>
    meth(r, proxy, type))
  File "/usr/lib/python2.5/urllib2.py", line 698, in proxy_open
    return self.parent.open(req)
  File "/usr/lib/python2.5/urllib2.py", line 387, in open
    response = meth(req, response)
  File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.5/urllib2.py", line 419, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 582, in http_error_302
    return self.parent.open(new)
  File "/usr/lib/python2.5/urllib2.py", line 381, in open
    response = self._open(req, data)
  File "/usr/lib/python2.5/urllib2.py", line 399, in _open
    '_open', req)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 675, in <lambda>
    meth(r, proxy, type))
  File "/usr/lib/python2.5/urllib2.py", line 698, in proxy_open
    return self.parent.open(req)
  File "/usr/lib/python2.5/urllib2.py", line 387, in open
    response = meth(req, response)
  File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.5/urllib2.py", line 419, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.5/urllib2.py", line 572, 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

a kód v Pythonu


import urllib2

http_post = "https://isir.justice.cz/isir/ueu/vysledek_lustrace.do?nazev_osoby= ..." # zkraceno
con_redir = urllib2.HTTPRedirectHandler()
con_cookie = urllib2.HTTPCookieProcessor()
myopener = urllib2.build_opener( con_redir, con_cookie )

result = myopener.open( http_post )

print result.readlines()
In the garden sleeps a messenger ·
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.5.2009 11:02 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Python a HTTP Error 302
Odpovědět | | Sbalit | Link | Blokovat | Admin
HTTP status "302 Found" nie je chyba. Je to jednoducho oznam, ze stranka je docasne na inej adrese (Location), ale klient by mal aj v buducnosti pouzivat aktualnu adresu, ktora je platnou adresou pozadovaneho resourcu; docasne ma ale pouzit inu adresu. Chybu z toho urobi az aplikacia - ako vravis, ak stranka presmerovava na samu seba, aplikacia sa teda domnieva, ze pri dalsom requeste na danu stranku dostane opat "302 Found" s rovnakou hodnotou "Location", a teda sa zacykli.

Mozne riesenia alebo workaroundy zavisia od toho, ktoru zo zucastnenych komunikujucich stran mozes zmenit.
27.5.2009 15:51 Dunric | skóre: 21
Rozbalit Rozbalit vše Re: Python a HTTP Error 302
Asi máš pravdu. Byl by nějaký nástin kódu, jak tuhle chybu obejít/ignorovat ? Nejsem moc zběhlý co se týče znalostí knihoven Pythonu. Mám samozřejmě možnost dělat změny jen na straně klienta.

In the garden sleeps a messenger ·

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.