Che cosa sto facendo di sbagliato nell'ambiente VM con Python urllib2 POST?
-
25-10-2019 - |
Domanda
import urllib
import urllib2
from urllib2 import Request
url = 'https://www.google.com'
response = urllib2.urlopen(url)
login_url = (url + '/login')
data = {'email': 'john',
'password': 'example'}
req = Request(login_url, urllib.urlencode(data))
response = urllib2.urlopen(req)
File "test.py", line 50, in <module>
response = urllib2.urlopen(req)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 405: Method Not Allowed
Sto facendo un metodo POST. Questo script funziona sul mio Mac OSX in esecuzione pitone 2.7.1, però, sulla mia macchina virtuale in esecuzione pitone 2.7 getta tale errore. V'è una certa HTTPHeaders Sono supponiamo di passare lungo quando si effettua una richiesta POST?
Soluzione
si dovrebbe trovare il doc che è necessario qui:
http://code.google.com/apis/accounts/docs/ AuthForInstalledApps.html
Per fare l'autenticazione è necessario utilizzare questo URL https://www.google.com/accounts/ ClientLogin che richiedono il servizio che si tenta di raggiungere e vi fornirà un access_token per il servizio specificato
È necessario memorizzare dei cookie per questo tipo di richiesta:
import urllib2
import cookielib
cookiejar = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(opener)
return urllib2
Altri suggerimenti
Sì, per google che probabilmente richiedono la presenza di un agente utente comune a login. Oltre a questo è necessario per memorizzare il cookie ti danno in Python. È possibile utilizzare Cookiejar.
Questo è un ottimo tutorial che insegna come inviare le intestazioni e salvare i cookie per le vostre richieste. http://www.voidspace.org.uk/python/articles/urllib2.shtml
http://www.voidspace.org.uk/python/articles/ cookielib.shtml