DrissionPage-expend


NameDrissionPage-expend JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/your-username/DrissionPage-expend
SummaryDrissionPage XHR请求扩展库,支持多种数据类型和请求方式
upload_time2025-07-09 14:43:36
maintainerDrissionPage Community
docs_urlNone
authorDrissionPage Community
requires_python>=3.7
licenseMIT
keywords drissionpage xhr request http automation web-scraping
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # XHR请求模块使用说明

## 概述

这是一个基于DrissionPage的XHR请求封装模块,支持多种数据类型和请求方式。相比原版本,新版本支持:

- ✅ 多种数据格式:表单数据、JSON数据、原始文本、二进制数据
- ✅ 自定义请求头
- ✅ 完整的HTTP方法支持:GET、POST、PUT、PATCH、DELETE
- ✅ 统一的API接口
- ✅ 更好的错误处理

## 主要改进

### 1. 统一的request方法

```python
def request(self, method: str, url: str,
            data: Optional[Union[Dict[str, Any], str, bytes]] = None,
            json_data: Optional[Dict[str, Any]] = None,
            headers: Optional[Dict[str, str]] = None,
            timeout: int = 30000) -> XHRResponse
```

### 2. 支持多种数据类型

- **Dict**: 自动转换为表单数据 (`application/x-www-form-urlencoded`)
- **str**: 作为原始文本发送 (`text/plain`)
- **bytes**: 作为二进制数据发送 (`application/octet-stream`)
- **json_data**: 作为JSON发送 (`application/json`)

### 3. 便捷方法

- `get(url, headers=None, timeout=30000)`
- `post(url, data=None, json_data=None, headers=None, timeout=30000)`
- `put(url, data=None, json_data=None, headers=None, timeout=30000)`
- `patch(url, data=None, json_data=None, headers=None, timeout=30000)`
- `delete(url, headers=None, timeout=30000)`

## 使用示例

### 基本用法

```python
from DrissionPage import ChromiumPage
from xhr_request import XHRClient

# 创建浏览器实例
page = ChromiumPage()
client = XHRClient(page)

# GET请求
response = client.get('https://api.example.com/data')
print(f"状态码: {response.status_code}")
print(f"响应: {response.text}")
```

### 发送表单数据

```python
# 方式1:使用post方法
form_data = {'username': 'user', 'password': 'pass'}
response = client.post('https://api.example.com/login', data=form_data)

# 方式2:使用通用request方法
response = client.request('POST', 'https://api.example.com/login', data=form_data)
```

### 发送JSON数据

```python
# 方式1:使用post方法
json_data = {'name': '张三', 'age': 25}
response = client.post('https://api.example.com/users', json_data=json_data)

# 方式2:使用通用request方法
response = client.request('POST', 'https://api.example.com/users', json_data=json_data)
```

### 发送原始文本

```python
text_data = "这是一些原始文本数据"
response = client.post('https://api.example.com/text', data=text_data)
```

### 发送二进制数据

```python
binary_data = b'\x00\x01\x02\x03\x04\x05'
response = client.post('https://api.example.com/binary', data=binary_data)
```

### 自定义请求头

```python
headers = {
    'Authorization': 'Bearer your-token',
    'User-Agent': 'Custom-Client/1.0',
    'X-API-Key': 'your-api-key'
}

# GET请求带自定义头
response = client.get('https://api.example.com/protected', headers=headers)

# POST请求带自定义头
response = client.post('https://api.example.com/data', 
                      json_data={'key': 'value'}, 
                      headers=headers)
```

### 其他HTTP方法

```python
# PUT请求
response = client.put('https://api.example.com/resource/1', 
                     json_data={'update': 'data'})

# PATCH请求
response = client.patch('https://api.example.com/resource/1', 
                       json_data={'field': 'new_value'})

# DELETE请求
response = client.delete('https://api.example.com/resource/1', 
                        headers={'Authorization': 'Bearer token'})
```

## 响应处理

```python
response = client.get('https://api.example.com/data')

# 检查请求是否成功
if response.ok:
    print("请求成功")
else:
    print(f"请求失败,状态码: {response.status_code}")

# 获取响应文本
print(response.text)

# 解析JSON响应
try:
    data = response.json
    print(data)
except ValueError:
    print("响应不是有效的JSON格式")

# 获取响应头
print(response.headers)
```

## 错误处理

```python
try:
    response = client.post('https://api.example.com/data', 
                          json_data={'key': 'value'})
    if response.ok:
        print("请求成功")
    else:
        print(f"HTTP错误: {response.status_code}")
except Exception as e:
    print(f"请求失败: {e}")
```

## 注意事项

1. **依赖**: 需要安装DrissionPage: `pip install DrissionPage`
2. **浏览器**: 需要Chromium浏览器实例运行
3. **同步请求**: 当前实现使用同步XHR请求
4. **编码**: 自动处理UTF-8编码
5. **超时**: 默认超时时间为30秒

## 迁移指南

如果你在使用旧版本,以下是主要变更:

### 旧版本
```python
# 表单数据
response = client.request('POST', url, form_data={'key': 'value'})

# JSON数据
response = client.json_request('POST', url, {'key': 'value'})
```

### 新版本
```python
# 表单数据
response = client.post(url, data={'key': 'value'})

# JSON数据
response = client.post(url, json_data={'key': 'value'})
```

新版本向后兼容,但建议使用新的API以获得更好的功能支持。

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/your-username/DrissionPage-expend",
    "name": "DrissionPage-expend",
    "maintainer": "DrissionPage Community",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "drissionpage, xhr, request, http, automation, web-scraping",
    "author": "DrissionPage Community",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/40/53/f4360a2569761dd487f0dd0ac9a3025b700280918490046f7ac90ec1f63c/drissionpage_expend-1.0.1.tar.gz",
    "platform": null,
    "description": "# XHR\u8bf7\u6c42\u6a21\u5757\u4f7f\u7528\u8bf4\u660e\r\n\r\n## \u6982\u8ff0\r\n\r\n\u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8eDrissionPage\u7684XHR\u8bf7\u6c42\u5c01\u88c5\u6a21\u5757\uff0c\u652f\u6301\u591a\u79cd\u6570\u636e\u7c7b\u578b\u548c\u8bf7\u6c42\u65b9\u5f0f\u3002\u76f8\u6bd4\u539f\u7248\u672c\uff0c\u65b0\u7248\u672c\u652f\u6301\uff1a\r\n\r\n- \u2705 \u591a\u79cd\u6570\u636e\u683c\u5f0f\uff1a\u8868\u5355\u6570\u636e\u3001JSON\u6570\u636e\u3001\u539f\u59cb\u6587\u672c\u3001\u4e8c\u8fdb\u5236\u6570\u636e\r\n- \u2705 \u81ea\u5b9a\u4e49\u8bf7\u6c42\u5934\r\n- \u2705 \u5b8c\u6574\u7684HTTP\u65b9\u6cd5\u652f\u6301\uff1aGET\u3001POST\u3001PUT\u3001PATCH\u3001DELETE\r\n- \u2705 \u7edf\u4e00\u7684API\u63a5\u53e3\r\n- \u2705 \u66f4\u597d\u7684\u9519\u8bef\u5904\u7406\r\n\r\n## \u4e3b\u8981\u6539\u8fdb\r\n\r\n### 1. \u7edf\u4e00\u7684request\u65b9\u6cd5\r\n\r\n```python\r\ndef request(self, method: str, url: str,\r\n            data: Optional[Union[Dict[str, Any], str, bytes]] = None,\r\n            json_data: Optional[Dict[str, Any]] = None,\r\n            headers: Optional[Dict[str, str]] = None,\r\n            timeout: int = 30000) -> XHRResponse\r\n```\r\n\r\n### 2. \u652f\u6301\u591a\u79cd\u6570\u636e\u7c7b\u578b\r\n\r\n- **Dict**: \u81ea\u52a8\u8f6c\u6362\u4e3a\u8868\u5355\u6570\u636e (`application/x-www-form-urlencoded`)\r\n- **str**: \u4f5c\u4e3a\u539f\u59cb\u6587\u672c\u53d1\u9001 (`text/plain`)\r\n- **bytes**: \u4f5c\u4e3a\u4e8c\u8fdb\u5236\u6570\u636e\u53d1\u9001 (`application/octet-stream`)\r\n- **json_data**: \u4f5c\u4e3aJSON\u53d1\u9001 (`application/json`)\r\n\r\n### 3. \u4fbf\u6377\u65b9\u6cd5\r\n\r\n- `get(url, headers=None, timeout=30000)`\r\n- `post(url, data=None, json_data=None, headers=None, timeout=30000)`\r\n- `put(url, data=None, json_data=None, headers=None, timeout=30000)`\r\n- `patch(url, data=None, json_data=None, headers=None, timeout=30000)`\r\n- `delete(url, headers=None, timeout=30000)`\r\n\r\n## \u4f7f\u7528\u793a\u4f8b\r\n\r\n### \u57fa\u672c\u7528\u6cd5\r\n\r\n```python\r\nfrom DrissionPage import ChromiumPage\r\nfrom xhr_request import XHRClient\r\n\r\n# \u521b\u5efa\u6d4f\u89c8\u5668\u5b9e\u4f8b\r\npage = ChromiumPage()\r\nclient = XHRClient(page)\r\n\r\n# GET\u8bf7\u6c42\r\nresponse = client.get('https://api.example.com/data')\r\nprint(f\"\u72b6\u6001\u7801: {response.status_code}\")\r\nprint(f\"\u54cd\u5e94: {response.text}\")\r\n```\r\n\r\n### \u53d1\u9001\u8868\u5355\u6570\u636e\r\n\r\n```python\r\n# \u65b9\u5f0f1\uff1a\u4f7f\u7528post\u65b9\u6cd5\r\nform_data = {'username': 'user', 'password': 'pass'}\r\nresponse = client.post('https://api.example.com/login', data=form_data)\r\n\r\n# \u65b9\u5f0f2\uff1a\u4f7f\u7528\u901a\u7528request\u65b9\u6cd5\r\nresponse = client.request('POST', 'https://api.example.com/login', data=form_data)\r\n```\r\n\r\n### \u53d1\u9001JSON\u6570\u636e\r\n\r\n```python\r\n# \u65b9\u5f0f1\uff1a\u4f7f\u7528post\u65b9\u6cd5\r\njson_data = {'name': '\u5f20\u4e09', 'age': 25}\r\nresponse = client.post('https://api.example.com/users', json_data=json_data)\r\n\r\n# \u65b9\u5f0f2\uff1a\u4f7f\u7528\u901a\u7528request\u65b9\u6cd5\r\nresponse = client.request('POST', 'https://api.example.com/users', json_data=json_data)\r\n```\r\n\r\n### \u53d1\u9001\u539f\u59cb\u6587\u672c\r\n\r\n```python\r\ntext_data = \"\u8fd9\u662f\u4e00\u4e9b\u539f\u59cb\u6587\u672c\u6570\u636e\"\r\nresponse = client.post('https://api.example.com/text', data=text_data)\r\n```\r\n\r\n### \u53d1\u9001\u4e8c\u8fdb\u5236\u6570\u636e\r\n\r\n```python\r\nbinary_data = b'\\x00\\x01\\x02\\x03\\x04\\x05'\r\nresponse = client.post('https://api.example.com/binary', data=binary_data)\r\n```\r\n\r\n### \u81ea\u5b9a\u4e49\u8bf7\u6c42\u5934\r\n\r\n```python\r\nheaders = {\r\n    'Authorization': 'Bearer your-token',\r\n    'User-Agent': 'Custom-Client/1.0',\r\n    'X-API-Key': 'your-api-key'\r\n}\r\n\r\n# GET\u8bf7\u6c42\u5e26\u81ea\u5b9a\u4e49\u5934\r\nresponse = client.get('https://api.example.com/protected', headers=headers)\r\n\r\n# POST\u8bf7\u6c42\u5e26\u81ea\u5b9a\u4e49\u5934\r\nresponse = client.post('https://api.example.com/data', \r\n                      json_data={'key': 'value'}, \r\n                      headers=headers)\r\n```\r\n\r\n### \u5176\u4ed6HTTP\u65b9\u6cd5\r\n\r\n```python\r\n# PUT\u8bf7\u6c42\r\nresponse = client.put('https://api.example.com/resource/1', \r\n                     json_data={'update': 'data'})\r\n\r\n# PATCH\u8bf7\u6c42\r\nresponse = client.patch('https://api.example.com/resource/1', \r\n                       json_data={'field': 'new_value'})\r\n\r\n# DELETE\u8bf7\u6c42\r\nresponse = client.delete('https://api.example.com/resource/1', \r\n                        headers={'Authorization': 'Bearer token'})\r\n```\r\n\r\n## \u54cd\u5e94\u5904\u7406\r\n\r\n```python\r\nresponse = client.get('https://api.example.com/data')\r\n\r\n# \u68c0\u67e5\u8bf7\u6c42\u662f\u5426\u6210\u529f\r\nif response.ok:\r\n    print(\"\u8bf7\u6c42\u6210\u529f\")\r\nelse:\r\n    print(f\"\u8bf7\u6c42\u5931\u8d25\uff0c\u72b6\u6001\u7801: {response.status_code}\")\r\n\r\n# \u83b7\u53d6\u54cd\u5e94\u6587\u672c\r\nprint(response.text)\r\n\r\n# \u89e3\u6790JSON\u54cd\u5e94\r\ntry:\r\n    data = response.json\r\n    print(data)\r\nexcept ValueError:\r\n    print(\"\u54cd\u5e94\u4e0d\u662f\u6709\u6548\u7684JSON\u683c\u5f0f\")\r\n\r\n# \u83b7\u53d6\u54cd\u5e94\u5934\r\nprint(response.headers)\r\n```\r\n\r\n## \u9519\u8bef\u5904\u7406\r\n\r\n```python\r\ntry:\r\n    response = client.post('https://api.example.com/data', \r\n                          json_data={'key': 'value'})\r\n    if response.ok:\r\n        print(\"\u8bf7\u6c42\u6210\u529f\")\r\n    else:\r\n        print(f\"HTTP\u9519\u8bef: {response.status_code}\")\r\nexcept Exception as e:\r\n    print(f\"\u8bf7\u6c42\u5931\u8d25: {e}\")\r\n```\r\n\r\n## \u6ce8\u610f\u4e8b\u9879\r\n\r\n1. **\u4f9d\u8d56**: \u9700\u8981\u5b89\u88c5DrissionPage: `pip install DrissionPage`\r\n2. **\u6d4f\u89c8\u5668**: \u9700\u8981Chromium\u6d4f\u89c8\u5668\u5b9e\u4f8b\u8fd0\u884c\r\n3. **\u540c\u6b65\u8bf7\u6c42**: \u5f53\u524d\u5b9e\u73b0\u4f7f\u7528\u540c\u6b65XHR\u8bf7\u6c42\r\n4. **\u7f16\u7801**: \u81ea\u52a8\u5904\u7406UTF-8\u7f16\u7801\r\n5. **\u8d85\u65f6**: \u9ed8\u8ba4\u8d85\u65f6\u65f6\u95f4\u4e3a30\u79d2\r\n\r\n## \u8fc1\u79fb\u6307\u5357\r\n\r\n\u5982\u679c\u4f60\u5728\u4f7f\u7528\u65e7\u7248\u672c\uff0c\u4ee5\u4e0b\u662f\u4e3b\u8981\u53d8\u66f4\uff1a\r\n\r\n### \u65e7\u7248\u672c\r\n```python\r\n# \u8868\u5355\u6570\u636e\r\nresponse = client.request('POST', url, form_data={'key': 'value'})\r\n\r\n# JSON\u6570\u636e\r\nresponse = client.json_request('POST', url, {'key': 'value'})\r\n```\r\n\r\n### \u65b0\u7248\u672c\r\n```python\r\n# \u8868\u5355\u6570\u636e\r\nresponse = client.post(url, data={'key': 'value'})\r\n\r\n# JSON\u6570\u636e\r\nresponse = client.post(url, json_data={'key': 'value'})\r\n```\r\n\r\n\u65b0\u7248\u672c\u5411\u540e\u517c\u5bb9\uff0c\u4f46\u5efa\u8bae\u4f7f\u7528\u65b0\u7684API\u4ee5\u83b7\u5f97\u66f4\u597d\u7684\u529f\u80fd\u652f\u6301\u3002\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "DrissionPage XHR\u8bf7\u6c42\u6269\u5c55\u5e93\uff0c\u652f\u6301\u591a\u79cd\u6570\u636e\u7c7b\u578b\u548c\u8bf7\u6c42\u65b9\u5f0f",
    "version": "1.0.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/your-username/DrissionPage-expend/issues",
        "Documentation": "https://github.com/your-username/DrissionPage-expend/blob/main/XHR_REQUEST_README.md",
        "Homepage": "https://github.com/your-username/DrissionPage-expend",
        "Repository": "https://github.com/your-username/DrissionPage-expend"
    },
    "split_keywords": [
        "drissionpage",
        " xhr",
        " request",
        " http",
        " automation",
        " web-scraping"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "318061c3a64a3e0e10c6c09577582f2cc3e0c00a588af20d4c82d8a3ca2f1f87",
                "md5": "dc938f12f6d7cadec0e4e7cfb0188243",
                "sha256": "885b9b428f83938124057c42716ed40427c52b348d76187e532aafef13104c42"
            },
            "downloads": -1,
            "filename": "drissionpage_expend-1.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dc938f12f6d7cadec0e4e7cfb0188243",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 8162,
            "upload_time": "2025-07-09T14:43:35",
            "upload_time_iso_8601": "2025-07-09T14:43:35.553796Z",
            "url": "https://files.pythonhosted.org/packages/31/80/61c3a64a3e0e10c6c09577582f2cc3e0c00a588af20d4c82d8a3ca2f1f87/drissionpage_expend-1.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4053f4360a2569761dd487f0dd0ac9a3025b700280918490046f7ac90ec1f63c",
                "md5": "788f859a235d15c799a6e14753d015d6",
                "sha256": "709abcd15b8595cecab7ab103d2f860496e085c83cbb10a9cdd53746be839b9d"
            },
            "downloads": -1,
            "filename": "drissionpage_expend-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "788f859a235d15c799a6e14753d015d6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 15889,
            "upload_time": "2025-07-09T14:43:36",
            "upload_time_iso_8601": "2025-07-09T14:43:36.640863Z",
            "url": "https://files.pythonhosted.org/packages/40/53/f4360a2569761dd487f0dd0ac9a3025b700280918490046f7ac90ec1f63c/drissionpage_expend-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-09 14:43:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "your-username",
    "github_project": "DrissionPage-expend",
    "github_not_found": true,
    "lcname": "drissionpage-expend"
}
        
Elapsed time: 0.42519s