簡體   English   中英

python 3中如何使用帶用戶名/密碼認證的urllib?

[英]How to use urllib with username/password authentication in python 3?

這是我在 python 3 中的 urllib 問題。

我寫了一段代碼,它在 Python 2.7 中運行良好,並且使用的是 urllib2。 它轉到 Inte.net 上的頁面(需要授權)並從該頁面獲取信息。

對我來說真正的問題是我不能讓我的代碼在 python 3.4 中工作,因為沒有 urllib2,而 urllib 的工作方式不同; 即使經過幾個小時的谷歌搜索和閱讀,我也一無所獲。 因此,如果有人可以幫助我解決這個問題,我將不勝感激。

這是我的代碼:

    request = urllib2.Request('http://mysite/admin/index.cgi?index=127')
    base64string = base64.encodestring('%s:%s' % ('login', 'password')).replace('\n', '')
    request.add_header("Authorization", "Basic %s" % base64string)
    result = urllib2.urlopen(request)
    resulttext = result.read()

謝天謝地,我終於找到了它的工作方式。 這是我的代碼:

request = urllib.request.Request('http://mysite/admin/index.cgi?index=127')
base64string = base64.b64encode(bytes('%s:%s' % ('login', 'password'),'ascii'))
request.add_header("Authorization", "Basic %s" % base64string.decode('utf-8'))
result = urllib.request.urlopen(request)
resulttext = result.read()

畢竟,urllib 還有一個不同之處:在我的例子中, resulttext變量的類型是<bytes>而不是<str> ,所以要對里面的文本做一些事情,我必須解碼它:

text = resulttext.decode(encoding='utf-8',errors='ignore')

urllib.request呢? 似乎它有你需要的一切。

import base64
import urllib.request

request = urllib.request.Request('http://mysite/admin/index.cgi?index=127')
base64string =  bytes('%s:%s' % ('login', 'password'), 'ascii')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib.request.urlopen(request)
resulttext = result.read()

在python 3中使用urllib,這是我的代碼:

from urllib.request import urlopen

url = 'https://someurl/'
page = urlopen(url)
html = page.read()

使用OpenerDirector的替代方法,為所有未來的 urllib 請求安裝 auth 標頭

login_pass = base64.b64encode(f'{login}:{password}'.encode()).decode()
opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', f'Basic {login_pass}')]
urllib.request.install_opener(opener)

response = urllib.request.urlopen(API_URL)
print(response.read().decode())

另一個使用HTTPBasicAuthHandler 的示例,但如果需要無條件發送憑據,則需要做更多的工作:

password_mgr = urllib.request.HTTPPasswordMgrWithPriorAuth()
password_mgr.add_password(None, API_URL, login, password, is_authenticated=True)
auth_handler = request.HTTPBasicAuthHandler(password_mgr)
opener = request.build_opener(auth_handler)
request.install_opener(opener)

response = urllib.request.urlopen(API_URL)
print(response.read().decode())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM