2012-02-15 11 views
1
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メソッドを実行しています。このスクリプトは、Python 2.7を実行している私のMAC OSX上で動作しますが、Python 2.7を実行している私のVirtual Machine上では、そのエラーをスローします。 POSTリクエストを行うときに渡すべきHTTPHeaderがいくつかありますか?Pythonのurllib2 POSTでVM環境で何が間違っていますか?

+0

osxのリクエストからの応答コードは何ですか? – dm03514

+0

私は[urllib2](https://gist.github.com/1841962#file_http_post_urllib.py)、[httplib](https://gist.github.com/1841962#file_http_post_httplib.py)を使用して405のhttpエラーを取得しません)、または[ソケットベースのスクリプト](https://gist.github.com/1841962#file_http_post_socket.py)をPython 2.x、Python 3.xにインストールします。 – jfs

答えて

1

あなたがここに必要なドキュメントを見つける必要があります:あなたはこのURLを使用する必要が認証を行うための

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

にあなたが到達しようサービスを必要とhttps://www.google.com/accounts/ClientLoginと指定したサービスのアクセストークンを提供します

このタイプのrのクッキーを保存する必要があります平等:

import urllib2 
import cookielib 
cookiejar = cookielib.LWPCookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar)) 
urllib2.install_opener(opener) 
return urllib2 
0

はい、Googleの場合、おそらくログインには一般的なユーザーエージェントが必要です。 これに加えて、Pythonで与えたクッキーを保存する必要があります。 CookieJarを使用することができます。

これは、ヘッダーを送信して、リクエストにCookieを保存する方法を教える素晴らしいチュートリアルです。 http://www.voidspace.org.uk/python/articles/urllib2.shtml

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

関連する問題