python接口登陆封装
时间: 2023-10-08 11:04:42 浏览: 79
以下是一个简单的Python接口登录封装示例,使用requests库进行HTTP请求和BeautifulSoup库处理HTML页面:
```python
import requests
from bs4 import BeautifulSoup
class InterfaceLogin:
def __init__(self, url, username, password):
self.url = url
self.username = username
self.password = password
self.session = requests.Session()
self.logged_in = False
def login(self):
login_page = self.session.get(self.url)
soup = BeautifulSoup(login_page.content, 'html.parser')
csrf_token = soup.find('input', {'name': 'csrf_token'})['value']
payload = {
'csrf_token': csrf_token,
'username': self.username,
'password': self.password
}
response = self.session.post(self.url, data=payload)
self.logged_in = True if self.username in response.text else False
def request(self, method, url, **kwargs):
if not self.logged_in:
self.login()
return self.session.request(method, url, **kwargs)
```
在创建`InterfaceLogin`对象时,需要传入接口登录页面的URL、用户名和密码。`login`方法会使用`requests.Session`对象模拟登录,获取CSRF token和提交登录表单。登录成功后,`logged_in`属性会被设置为`True`。
`request`方法可以接受任意HTTP请求方法和URL,会自动检查是否已经登录,如果没有登录则调用`login`方法。可以通过`**kwargs`传递请求参数,例如headers、params、data等。示例调用:
```python
login = InterfaceLogin('https://example.com/login', 'username', 'password')
response = login.request('get', 'https://example.com/api/data', params={'page': 1})
print(response.json())
```
以上示例会先尝试登录,然后使用GET方法请求`https://example.com/api/data?page=1`,并将返回的JSON数据打印出来。如果登录失败,则会抛出异常。
阅读全文