requests--传递参数

简介: requests--传递参数

传递参数


传递URL参数

data = {'city': '北京'}
# 参数有中文如果发送不了,必须要编码
city = parse.urlencode(data).encode('utf-8')

一般在GET请求中使用查询字符串(query string)来进行参数传递,在requests库中使用如下方法:

import requests
base_url = 'http://httpbin.org'
# 将参数存在字典里
params_data = {"user": "zou", "pwd": '31500'}
r = requests.get(base_url + '/get', params=params_data)
print(r.url)  # 打印URL
print(r.status_code)

结果

http://httpbin.org/get?user=zou&pwd=31500
200


传递body参数

在post请求里有两个参数,data为form表单格式的,json为Content-Type是json格式的。返回的值如果是json格式的,可以用r.json(),r.text不管是json格式还是html格式的都可以

在POST请求中,一般参数都在请求体中传递,在requests中用法如下:

import requests
base_url = 'http://httpbin.org'
# 将参数存在字典里
form_data = {"user": "zou", "pwd": '31500'}
r = requests.post(base_url + '/post', data=form_data)
print(r.url)  # 打印URL
print(r.status_code)
print(r.text)  # 打印出响应文本

结果:

http://httpbin.org/post
200
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "pwd": "31500", 
    "user": "zou"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "18", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.4"
  }, 
  "json": null, 
  "origin": "112.10.81.210, 112.10.81.210", 
  "url": "https://httpbin.org/post"
}


data和json的区别


如果我们发送post请求时,里面有个参数json,还有个参数时data,它们都是提交的服务器的数据,那它们有什么区别呢?

data与json既可以是str,也可以是dict

区别如下:

不管json是str还是dict,如果不指定headers中的content-type,默认为application/json

data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式,此时数据可以从request.POST里面获取,而request.body的内容则为a=1&b=2的这种形式,注意,即使指定content-type=application/json,request.body的值也是类似于a=1&b=2,所以并不能用json.loads(request.body.decode())得到想要的值

data为str时,如果不指定content-type,默认为application/json


原始响应内容


可以找出 Requests 使用了什么编码,并且能够使用r.encoding 属性来改变它:

r.encoding  # 获取编码格式
'utf-8'
r.encoding = 'ISO-8859-1'  # 设置编码格式

在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:

>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'

如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过Response.raise_for_status() 来抛出异常:

>>> bad_r = requests.get('http://httpbin.org/status/404')
>>> bad_r.status_code
404
>>> bad_r.raise_for_status()
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

相关文章
|
存储 安全 算法
【BLE】 BLE配对绑定保姆级介绍
实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。
5209 1
【BLE】 BLE配对绑定保姆级介绍
|
3天前
|
安全 数据挖掘 API
如何快速识别游戏安全运营中外挂与多开用户?
IP是反外挂与多开治理的核心信号,贯穿账号、设备与行为。本文从工程视角出发,结合可运行代码,详解IP在风控中的关键作用:识别网络特征、构建聚类模型、集成主流IP数据库(如IP数据云、IPinfo),并提供可落地的IP风险评分方案,助力游戏安全体系实现高效防御。(238字)
|
安全 网络安全
网络漏洞
指硬件、软件或策略上的缺陷,这种缺陷导致非法用户 未经授权而获得访问系统的权限或提高其访问权限。有了这种访问权限,非法用户就可以为所欲为,从而造成对网络安全的威胁。 区别于后门。后门:是软硬件制造者为了进行非授权访问而在程序中故意设置的万能访问口令,这些口令无论是被攻破,还是只掌握在制造者手中,都对使用者的系统安全构成严重的威胁。 漏洞与后门是不同的,漏洞是难以预知的,后门则是人为故意设置的。
|
12月前
|
人工智能 供应链 数据可视化
跨境电商供应链优化趋势:从智能库存到绿色物流
高效供应链管理是行业发展的关键,涉及原材料采购、生产制造、库存管理、跨境物流和终端交付等环节。通过数据驱动决策、多供应商合作、灵活物流策略、清关合规和技术赋能,可以优化供应链,提升运营效率。
1221 7
跨境电商供应链优化趋势:从智能库存到绿色物流
|
机器人 Android开发 开发者
视频号不入镜自动开播的机器人真的来啦
视频号不入镜自动开播的机器人真的来啦
414 2
|
存储 机器学习/深度学习 网络协议
阿里云企业级ARM计算规格族特点、适用场景及收费标准与活动价格参考
阿里云企业级ARM计算规格族是阿里云继X86计算、异构计算、弹性裸金屈服务器、超级计算集群之后推出的全新架构云服务器,ARM计算规格族有通用型实例规格族g8y、计算型实例规格族c8y、通用型实例规格族g6r等。下面是阿里云企业级ARM计算规格族特点、适用场景及最新收费标准和活动价格参考。
阿里云企业级ARM计算规格族特点、适用场景及收费标准与活动价格参考
|
机器学习/深度学习 人工智能 搜索推荐
《统计学简易速速上手小册》第8章:贝叶斯统计(2024 最新版)
《统计学简易速速上手小册》第8章:贝叶斯统计(2024 最新版)
318 0
|
开发者 索引 Python
Flask环境搭建与项目初始化
【4月更文挑战第15天】本文指导如何搭建Flask开发环境并初始化项目。首先确保安装Python,然后通过pip安装Flask。创建名为`myflaskapp`的项目目录,包含`app.py`入口文件。在`app.py`中初始化Flask应用,定义路由和视图函数。运行`python app.py`启动开发服务器,访问`http://127.0.0.1:5000/`查看结果。完成基本设置后,可按需求扩展应用功能。
|
XML 存储 JSON
详细比较JSON和XML这两种数据格式
详细比较JSON和XML这两种数据格式
1020 2
|
Java 程序员 编译器
Java注释
Java注释
114 0