¿Qué estoy haciendo mal en el entorno VM con la publicación de Urllib2 de Python?
-
25-10-2019 - |
Pregunta
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
Estoy haciendo un método de publicación. Este script funciona en mi Mac OSX con Python 2.7.1, sin embargo, en mi máquina virtual que ejecuta Python 2.7 lanza ese error. ¿Hay algunos httphaaders que se supone que debo transmitir al hacer una solicitud posterior?
Solución
Debe encontrar el documento que necesita aquí:
http://code.google.com/apis/accounts/docs/authforinstalledapps.html
Para hacer la autenticación necesita usar esta URL https://www.google.com/accounts/clientlogin que requieren servicio al que intente llegar y le proporcionará un access_token para el servicio especificado
Necesita almacenar cookie para este tipo de solicitud:
import urllib2
import cookielib
cookiejar = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(opener)
return urllib2
Otros consejos
Sí, para Google probablemente requerirán que tenga un agente de usuario común para iniciar sesión. Además de esto, necesitará almacenar la galleta que le dan en Python. Puedes usar Cookiejar.
Este es un gran tutorial que enseña cómo enviar encabezados y guardar cookies para sus solicitudes.http://www.voidspace.org.uk/python/articles/urllib2.shtml