Что я делаю неправильно в среде виртуальных машин с помощью Python urllib2 POST? - PullRequest
1 голос
/ 16 февраля 2012
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

Я делаю метод POST.Этот сценарий работает на моем MAC OSX с Python 2.7.1, однако на моей виртуальной машине с Python 2.7 он выдает эту ошибку.Есть ли какие-нибудь HTTPHeaders, которые я предполагаю передать при выполнении запроса POST?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

вы должны найти документ, который вам нужен здесь:

http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html

Для выполнения аутентификации вам необходимо использовать этот URL https://www.google.com/accounts/ClientLogin, для которого требуется служба, к которой вы пытаетесь обратиться, и она предоставит вам access_token для указанной службы

Вам необходимо сохранить cookie для этого типа запроса:

import urllib2
import cookielib
cookiejar = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(opener)
return urllib2
0 голосов
/ 16 февраля 2012

Да, для Google они, вероятно, потребуют, чтобы у вас был общий пользовательский агент для входа в систему.В дополнение к этому вам нужно будет сохранить куки, которые они вам дают в python.Вы можете использовать CookieJar.

Это отличный учебник, который учит, как отправлять заголовки и сохранять файлы cookie для ваших запросов.http://www.voidspace.org.uk/python/articles/urllib2.shtml

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

...