Was mache ich in der VM -Umgebung mit Pythons urllib2 Post falsch?
-
25-10-2019 - |
Frage
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
Ich mache eine Post -Methode. Dieses Skript funktioniert auf meinem Mac OSX, das Python 2.7.1 ausführt. Auf meiner virtuellen Maschine, die Python 2.7 ausführt, wirft es diesen Fehler aus. Gibt es einige HTTPHeaders, die ich bei einer Postanfrage weitergeben kann?
Lösung
Sie sollten den Dokument finden, den Sie hier benötigen:
http://code.google.com/apis/accounts/docs/authforinstalledApps.html
Für das Auth müssen Sie diese URL verwenden https://www.google.com/accounts/clientlogin Für den Service, den Sie erreichen möchten, erhalten Sie einen Access_Token für den angegebenen Dienst
Sie müssen Cookie für diese Art von Anfrage speichern:
import urllib2
import cookielib
cookiejar = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(opener)
return urllib2
Andere Tipps
Ja, für Google müssen Sie wahrscheinlich einen gemeinsamen Benutzeragenten anmelden. Darüber hinaus müssen Sie den Keks, den sie Ihnen in Python geben, aufbewahren. Sie können Cookiejar verwenden.
Dies ist ein großartiges Tutorial, in dem es lehrt, wie man Headers schickt und Cookies für Ihre Anfragen speichert.http://www.voidspace.org.uk/python/articles/urllib2.shtml