2012-07-12 14 views
7

Sto usando le librerie urllib2 e urllib in pitonePerché ottengo "Errore HTTP 405: metodo non consentito" quando si richiede un URL utilizzando urllib2?

supporre ho avuto il seguente codice

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 

quando ho eseguito il codice di cui sopra sto ottenendo il seguente errore

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 

qualcuno può lasciare so che cosa sta succedendo qui e perché non funziona

Grazie in anticipo ............

+0

@ Paolo: Grazie mille per l'editing –

risposta

13

Il server che si sta chiamando indica che il metodo POST non è consentito per l'URL che si sta tentando di chiamare.

Passando nella porzione di percorso dell'URL come parametro di dati dell'oggetto Request si sta creando un POST anziché un GET.

ho il sospetto che si voleva inviare una richiesta GET invece:

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

ho il sospetto che utf-8 che codifica per l'URL senza urlencoding può essere un problema, però. – geoffspear

+0

@Wooble: non con quello nell'OP. –

+0

Beh, è ​​vero, anche se in quell'esempio '.encode ('utf-8')' è un no-op poiché è già tutto ASCII e rimarrà lo stesso. – geoffspear

Problemi correlati