博客
关于我
Requests实践详解
阅读量:428 次
发布时间:2019-03-06

本文共 4206 字,大约阅读时间需要 14 分钟。

Requests 是 Python 中一个非常强大的 HTTP 库,基于 urllib 但功能更强大,适合处理 HTTP 请求和解析响应。它的安装和使用都非常简单,适合开发者快速进行网络操作。

Requests 的安装

安装 Requests 只需在终端输入以下命令:

pip install requests

安装完成后,你可以立即开始使用 Requests。

Requests 的使用

请求方式

Requests 提供了多种请求方式,包括 GET、POST、DELETE、PUT 等。例如:

import requestsrequests.post("http://httpbin.org/post")requests.put("http://httpbin.org/put")requests.delete("http://httpbin.org/delete")requests.get("http://httpbin.org/get")

响应对象

每次请求都会返回一个响应对象,该对象提供了多种方法来解析响应数据:

  • response.json():将响应转换为 JSON 格式。
  • response.text:以字符串形式返回响应内容。
  • response.content:以二进制形式返回响应内容。
  • response.url:返回请求的 URL。
  • response.status_code:返回请求的状态码。
  • response.reason:返回状态码对应的原因。
  • response.headers:返回响应头。
  • response.cookies:返回 cookies 信息。
  • response.raw:返回原始响应体。
  • response.encoding:返回编码格式。

实际案例

不带参数的 GET 请求
import requestsresponse = requests.get('http://www.baidu.com')print(response.text)
带参数的 GET 请求
import requestsr = requests.get('http://www.baidu.com/s', params={'wd': '温一壶清酒'})print(r.url)print(r.text)
常见登录 POST 请求
import requestsheaders = {'Authorization': ''}data = {'username': 'user', 'password': 'password'}r = requests.post(url='https://example.com/login', data=data, headers=headers)print(r.status_code)print(r.text)
Basic Auth 登录 POST 请求
import requestsfrom requests.auth import HTTPBasicAuthauth = HTTPBasicAuth('username', 'password')r = requests.post(url='https://example.com/login', auth=auth)print(r.status_code)print(r.text)
设置请求头
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}r = requests.get('http://www.example.com', headers=headers)print(r.text)
证书验证
import requestsimport urllib3urllib3.disable_warnings()r = requests.get('https://www.12306.cn', verify=False)print(r.status_code)print(r.text)

Requests 的综合实践

以下是一个综合实践示例,展示了动态传参、请求头设置、JSON 入参嵌套等功能:

import requestsimport jsonhost = ''  # 替换为实际的主机名或 IP 地址def better_output(json_str):    return json.dumps(json.loads(json_str), indent=4, ensure_ascii=False)def login():    headers = {'Authorization': ''}    data = {'username': 'user', 'password': 'password'}    url = host + '/token'    r = requests.post(url=url, data=data, headers=headers, verify=False)    global token    token = r.json()['access_token']    print("登录接口响应的状态码为:", r.status_code)    print("登录接口响应的数据为:", better_output(r.text))    print("获取到的 token 值为:", token)def search_gender_data():    headers = {        'Content-Type': 'application/json;charset=utf-8',        'Authorization': 'Bearer ' + token    }    url = host + '/api'    r1 = requests.get(url=url, headers=headers)    global gender    gender = r1.json()['values'][0]['code']    print("搜索接口响应的状态码为:", r1.status_code)    print("搜索接口响应的数据为:", better_output(r1.text))    print("获取的性别 code 为:", gender)def create_user():    headers = {        'Content-Type': 'application/json;charset=utf-8',        'Authorization': 'Bearer ' + token    }    data = {        "duty": "",        "dutyCode": "",        "rank": "",        "rankCode": "",        "deleted": 'false',        "userId": "",        "employeeId": "",        "position": "测试负责人",        "companyMainPosition": 'true'    }    data1 = {        "departmentPath": "",        "directManager": "",        "directManagerId": '',        "directManagerName": "",        "employeeType": '',        "email": "10150001@qq.com",        "mobile": "15110151015",        "mobileCode": "86",        "countryCode": "CN",        "employeeTypeCode": "",        "userOID": '',        "employeeID": "10150001",        "fullName": "10150001接口新增",        "status": 1001,        "manager": 'false',        "leavingDate": "3018-01-31T16:00:00.000Z",        "gender": "",        "genderCode": gender,        "birthday": "",        "entryTime": "",        "customFormValues": [],        'userJobsDTOs': [data]    }    url = host + '/api'    create_u = requests.post(url=url, json=data1, headers=headers)    print("创建人员接口 url 为:", url)    print("创建人员接口响应的状态码为:", create_u.status_code)    print("创建人员接口响应的数据为:", better_output(create_u.text))if __name__ == '__main__':    login()    search_gender_data()    create_user()

总结

通过上述学习和实践,我对 Requests 有了更深入的理解。它极大地简化了 HTTP 请求的处理流程,适合处理各种网络操作。无论是简单的数据获取,还是复杂的 API 接口调用,Requests 都能提供强大而灵活的支持。如果你正在从事 Web 开发或数据爬取项目,Requests 是一个非常不错的选择。希望我的学习过程能为你提供帮助!

转载地址:http://lzluz.baihongyu.com/

你可能感兴趣的文章
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>
Nodejs简介以及Windows上安装Nodejs
查看>>
nodejs系列之express
查看>>
nodejs系列之Koa2
查看>>
Nodejs连接mysql
查看>>
nodejs连接mysql
查看>>
NodeJs连接Oracle数据库
查看>>
nodejs配置express服务器,运行自动打开浏览器
查看>>
NodeMCU教程 http请求获取Json中文乱码解决方案
查看>>
Nodemon 深入解析与使用
查看>>
NodeSession:高效且灵活的Node.js会话管理工具
查看>>
node~ http缓存
查看>>
node不是内部命令时配置node环境变量
查看>>
node中fs模块之文件操作
查看>>
Node中同步与异步的方式读取文件
查看>>
node中的get请求和post请求的不同操作【node学习第五篇】
查看>>
Node中的Http模块和Url模块的使用
查看>>
Node中自启动工具supervisor的使用
查看>>