簡體   English   中英

如何使用urllib2使用Python對站點進行身份驗證?

[英]How to authenticate a site with Python using urllib2?

在Stackoverflow和網絡上閱讀了很多內容后,我仍然在努力讓事情發揮作用。

我的挑戰:使用Python和urllib2訪問我所屬的網站的受限制部分。

從我讀過的代碼應該是這樣的:

mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

url = 'http://www.domain.com'

mgr.add_password(None, url, 'username', 'password')
handler = urllib2.HTTPBasicAuthHandler(mgr)
opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

try:
    response = urllib2.urlopen('http://www.domain.com/restrictedpage')
    page = response.read()
    print page.geturl()
except IOError, e:
    print e

打印不打印“http://www.domain.com/restrictedpage”,但顯示“http://www.domain.com/login”,因此我的憑據未存儲/處理,我正在重定向。

我怎樣才能讓它發揮作用? 我已經嘗試了好幾天,並且一直在追求同樣的死胡同。 我已經嘗試了所有我找不到的例子。

我的主要問題是:使用Python和urllib2對網站進行身份驗證需要什么? 快速提問:我做錯了什么?

首先手動檢查成功通過身份驗證后的實際情況(Chrome說明):

  • 在Chrome中打開開發工具(Ctrl + Shift + I)
  • 單擊網絡選項卡
  • 去手動進行身份驗證(進入頁面,輸入user + passwd + submit)
  • 檢查開發人員工具的“網絡”選項卡中的POST方法
  • 檢查請求標頭,查詢字符串參數和表單數據。 在那里,您可以在自己的POST中找到所需的所有信息。

然后安裝“Advanced Rest Client(ARC)”Chrome擴展程序

使用ARC構造有效的POST進行身份驗證。

現在您知道標題和表單數據中包含的內容。 以下是使用請求的示例代碼,該代碼適用於某個特定網站:

import requests

USERNAME = 'user' # put correct usename here
PASSWORD = 'password' # put correct password here

LOGINURL = 'https://login.example.com/'
DATAURL = 'https://data.example.com/secure_data.html'

session = requests.session()

req_headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

formdata = {
    'UserName': USERNAME,
    'Password': PASSWORD,
    'LoginButton' : 'Login'
}

# Authenticate
r = session.post(LOGINURL, data=formdata, headers=req_headers, allow_redirects=False)
print r.headers
print r.status_code
print r.text

# Read data
r2 = session.get(DATAURL)
print "___________DATA____________"
print r2.headers
print r2.status_code
print r2.text

對於HTTP Basic Auth您可以參考: http//www.voidspace.org.uk/python/articles/authentication.shtml

暫無
暫無

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

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