2009-06-25 11 views
5

私は現在、ウェブページをダウンロードし、私が興味を持っているいくつかのデータを抽出する小さなスクリプトを持っています。urllib2でHTTPSにログイン

は現在、私はそうのようなページをダウンロードしている:これは完璧に動作しますが

import commands 
command = 'wget --output-document=- --quiet --http-user=USER --http-password=PASSWORD https://www.example.ca/page.aspx' 
status, text = commands.getstatusoutput(command) 

、私はそれはwgetの上の依存関係を削除しても意味がしようと思いました。上記をurllib2に変換するのは簡単なことだと思っていましたが、これまでのところ私は成功していませんでした。インターネットは完全なurllib2の例ですが、HTTPSサーバとの簡単なユーザ名とパスワードのHTTP認証の必要性に合ったものは見つかりませんでした。

答えて

1

requestsモジュールは、HTTP/HTTPS機能に近代的なAPIを提供します。

import requests 

url = 'https://www.someserver.com/toplevelurl/somepage.htm' 

res = requests.get(url, auth=('USER', 'PASSWORD')) 

status = res.status_code 
text = res.text 
+0

私は標準的なライブラリで何かを好みましたが、これは明らかな方法のように思えます。 –

6

thisは、それがまっすぐ進むべきである、と言う

[など]長いお近くのPythonがSSLをサポートしているよう。

HTTP基本認証だけを使用する場合は、hereと異なるハンドラを設定する必要があります。あなたがダイジェストを行う場合

import urllib2 

theurl = 'http://www.someserver.com/toplevelurl/somepage.htm' 
username = 'johnny' 
password = 'XXXXXX' 
# a great password 

passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
# this creates a password manager 
passman.add_password(None, theurl, username, password) 
# because we have put None at the start it will always 
# use this username/password combination for urls 
# for which `theurl` is a super-url 

authhandler = urllib2.HTTPBasicAuthHandler(passman) 
# create the AuthHandler 

opener = urllib2.build_opener(authhandler) 

urllib2.install_opener(opener) 
# All calls to urllib2.urlopen will now use our handler 
# Make sure not to include the protocol in with the URL, or 
# HTTPPasswordMgrWithDefaultRealm will be very confused. 
# You must (of course) use it when fetching the page though. 

pagehandle = urllib2.urlopen(theurl) 
# authentication is now handled automatically for us 

は、あなたには、いくつかの追加のヘッダーを設定する必要がありますが、彼らは関係なく、SSLの使用と同じです:

そこ例を引用。 python + urllib2 + http + digestの場合はGoogleです。

乾杯、

+0

ちょうどテストされました:Works for me。 – Boldewyn

+0

申し訳ありませんが、認証部分を取得しませんでした。私は1秒で私の答えを更新します。 – Boldewyn

+0

Oho、oh。あなたはurllib2で余分な仕事をしなければならないようです: http://docs.python.org/howto/urllib2.html 基本的に、urllib2はヘッダでも基本認証を行います。ごめんなさい。 – Boldewyn

1

はurllib2のドキュメントは、基本認証での作業の例があります。

http://docs.python.org/library/urllib2.html#examples

+0

どの "realm"と "uri"をadd_passwordに渡すのですか? 私はHTTPと認証について多くのことを知らないことは明らかです。 –

+0

urllib2.HTTPPasswordMgrWithDefaultRealmを使用すると、レルムを知る必要はありません。レルムは、わかっている限り、サーバがログインするための(人間が判読可能な)名前を提供するための単なる方法です。乾杯、 – Boldewyn

関連する問題