Python 3.4使用requests登录aspx页面

发布于:2024-07-05 ⋅ 阅读:(21) ⋅ 点赞:(0)

在 Python 3.4 中使用 requests 库登录到一个 ASPX 页面,通常涉及发送 POST 请求来提交表单数据。通常情况下我们会犯下面这样的错误:

在这里插入图片描述

1、问题背景

在 Python 3.4 中,使用 requests 库尝试登录一个 aspx 页面,然后作为登录用户获取另一个页面的内容。但是,发现无法保留登录会话中的 Cookie 信息,导致无法以登录用户身份访问其他页面。

2、解决方案

在使用 requests 库进行 ASPX 页面登录时,登录成功后返回的响应可能包含重定向信息。当在代码中执行 s.post(URL, data=login_data) 进行登录时,如果允许重定向(即 allow_redirects=True),requests 库将自动遵循重定向并返回重定向后的响应。然而,重定向后的响应中可能不包含登录所必需的 Cookie 信息,导致无法保持登录状态。

为了解决这个问题,需要在 requests.post() 方法中使用 allow_redirects=False 参数来禁止重定向。这样,requests 库将不会自动遵循重定向,而是直接返回登录请求的响应。此时,可以从响应中获取登录所必需的 Cookie 信息,并将其保存到 requests.Session 对象中,以便在后续请求中使用。

import requests
from bs4 import BeautifulSoup

URL = "https://example.com/Login.aspx"
durl = "https://example.com/Daily.aspx"

user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36'
language = 'en-US,en;q=0.8'
encoding = 'gzip, deflate'
accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
connection = 'keep-alive'
headers = {
    "Accept": accept,
    "Accept-Encoding": encoding,
    "Accept-Language": language,
    "Connection": connection,
    "User-Agent": user_agent
}

username = "user"
password = "pass"

s = requests.Session()
s.headers.update(headers)

r = s.get(URL)
soup = BeautifulSoup(r.content)

LASTFOCUS = soup.find(id="__LASTFOCUS")['value']
EVENTTARGET = soup.find(id="__EVENTTARGET")['value']
EVENTARGUMENT = soup.find(id="__EVENTARGUMENT")['value']
VIEWSTATEFIELDCOUNT = soup.find(id="__VIEWSTATEFIELDCOUNT")['value']
VIEWSTATE = soup.find(id="__VIEWSTATE")['value']
VIEWSTATE1 = soup.find(id="__VIEWSTATE1")['value']
VIEWSTATE2 = soup.find(id="__VIEWSTATE2")['value']
VIEWSTATE3 = soup.find(id="__VIEWSTATE3")['value']
VIEWSTATE4 = soup.find(id="__VIEWSTATE4")['value']
VIEWSTATEGENERATOR = soup.find(id="__VIEWSTATEGENERATOR")['value']

login_data = {
    "__LASTFOCUS": "",
    "__EVENTTARGET": "",
    "__EVENTARGUMENT": "",
    "__VIEWSTATEFIELDCOUNT": "5",
    "__VIEWSTATE": VIEWSTATE,
    "__VIEWSTATE1": VIEWSTATE1,
    "__VIEWSTATE2": VIEWSTATE2,
    "__VIEWSTATE3": VIEWSTATE3,
    "__VIEWSTATE4": VIEWSTATE4,
    "__VIEWSTATEGENERATOR": VIEWSTATEGENERATOR,
    "__SCROLLPOSITIONX": "0",
    "__SCROLLPOSITIONY": "100",
    "ctl00$NameTextBox": "",
    "ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$UserName": username,
    "ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$Password": password,
    "ctl00$ContentPlaceHolderNavPane$LeftSection$UserLogin$LoginButton": "Login",
    "ctl00$ContentPlaceHolder1$RetrievePasswordUserNameTextBox": "",
    "hiddenInputToUpdateATBuffer_CommonToolkitScripts": "1"
}

## 禁用重定向,以便获取登录请求的响应
r1 = s.post(URL, data=login_data, allow_redirects=False)

## 将登录请求的响应 Cookie 信息保存到 Session 对象中
s.cookies.update(r1.cookies)

## 使用包含登录 Cookie 的 Session 对象访问其他页面
d = s.get(durl)
dsoup = BeautifulSoup(d.content)

## 打印出其他页面的内容
print(dsoup)

上面代码示例提供了一个基本的框架,可以帮助大家使用 Python 3.4 中的 requests 库登录到 ASPX 页面。根据具体的网站要求和实际情况,大家可能需要调整代码以满足特定的需求。