web-dev-qa-db-ja.com

Python URLのユーザー名とパスワードを処理する

Pythonをいじって、これを使用しようとしています https://updates.opendns.com/nic/update?hostname= 、URLにアクセスしたときユーザー名とパスワードの入力を求めるプロンプトが表示されます。私は探し回っていましたが、パスワードマネージャーについて何かを見つけたので、これを思いつきました。

urll = "http://url.com"
username = "username"
password = "password"

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()

passman.add_password(None, urll, username, password)

authhandler = urllib2.HTTPBasicAuthHandler(passman)

urllib2 = urllib2.build_opener(authhandler)

pagehandle = urllib.urlopen(urll)

print (pagehandle.read())

これはすべて機能しますが、コマンドラインを介してユーザー名とパスワードを要求するため、ユーザーの操作が必要です。それらの値を自動的に入力してほしい。何が悪いのですか?

8

リクエストURLは「RESTRICTED」です。

このコードを試すと、次のことがわかります。

import urllib2
theurl = 'https://updates.opendns.com/nic/update?hostname='
req = urllib2.Request(theurl)
try:
    handle = urllib2.urlopen(req)
except IOError, e:
    if hasattr(e, 'code'):
        if e.code != 401:
            print 'We got another error'
            print e.code
        else:
            print e.headers
            print e.headers['www-authenticate']

認証ヘッダーを追加する必要があります。詳細については、以下をご覧ください。 http://www.voidspace.org.uk/python/articles/authentication.shtml

また、別のコード例は次のとおりです。 http://code.activestate.com/recipes/305288-http-basic-authentication/

POST requestを送信したい場合は、試してください:

import urllib
import urllib2
username = "username"
password = "password"
url = 'http://url.com/'
values = { 'username': username,'password': password }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
result = response.read()
print result

注:これは、POSTリクエストをURLに送信する方法の例にすぎません。

2
mortezaipo

代わりに requests を使用できます。コードは次のように単純です。

import requests
url = 'https://updates.opendns.com/nic/update?hostname='
username = 'username'
password = 'password'
print(requests.get(url, auth=(username, password)).content)
12
Ion Scerbatiuc

私はしばらくpythonで遊んでいませんが、これを試してください:

urllib.urlopen("http://username:[email protected]/path")
2
James Mason