¿Qué estoy haciendo mal en el entorno VM con la publicación de Urllib2 de Python?

StackOverflow https://stackoverflow.com/questions/9303419

  •  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?

¿Fue útil?

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

http://www.voidspace.org.uk/python/articles/cookielib.shtml

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top