2012-07-12 29 views
7

estoy usando bibliotecas urllib2 y urllib en Python¿Por qué me sale "HTTP Error 405: método no permitido" cuando solicito una URL usando urllib2?

suponer que tenía el siguiente código

import urllib2 
import urllib 

url = 'http://ah.example.com' 
half_url = u'/servlet/av/jd?ai=782&ji=2624743&sn=I' 

req = urllib2.Request(url, half_url.encode('utf-8')) 
response = urllib2.urlopen(req) 
print response 

cuando ejecuto el código anterior que estoy recibiendo el siguiente error

Traceback (most recent call last): 
    File "example.py", line 39, in <module> 
    response = urllib2.urlopen(req) 
    File "/usr/lib64/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/usr/lib64/python2.7/urllib2.py", line 398, in open 
    response = meth(req, response) 
    File "/usr/lib64/python2.7/urllib2.py", line 511, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/usr/lib64/python2.7/urllib2.py", line 436, in error 
    return self._call_chain(*args) 
    File "/usr/lib64/python2.7/urllib2.py", line 370, in _call_chain 
    result = func(*args) 
    File "/usr/lib64/python2.7/urllib2.py", line 519, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 405: Method Not Allowed 

puede alguien dejar yo sé qué está pasando aquí y por qué no está funcionando

Gracias de antemano ............

+0

@ Pablo: Muchas gracias por la edición –

Respuesta

13

El servidor que está llamando le está diciendo que el método POST no está permitido para la URL a la que está tratando de llamar.

Al pasar en la parte de la ruta de su URL como el Request parámetro de datos de objeto que está haciendo esto un POST en lugar de un GET.

sospecho que quería enviar una solicitud GET en su lugar:

req = urllib2.Request(url + half_url.encode('utf-8')) 
+0

que sospechan que UTF-8 que codifica la dirección URL sin URLEncoding puede ser un problema, sin embargo. – geoffspear

+0

@Wooble: No con el del OP. –

+0

Bueno, cierto, aunque en ese ejemplo '.encode ('utf-8')' no es operativo ya que ya es todo ASCII y seguirá siendo el mismo. – geoffspear

Cuestiones relacionadas