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

相关文章
|
5月前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
58 0
|
5月前
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
423 4
|
网络协议 Go
curl --resolve参数的作用
curl --resolve参数的作用
209 0
|
1月前
|
JSON API 数据格式
requests库中json参数与data参数使用方法的深入解析
选择 `data`或 `json`取决于你的具体需求,以及服务器端期望接收的数据格式。
136 2
|
1月前
|
数据采集 Python
Flask获取post,get参数,以及 爬虫 requests的get,post参数详解
Flask获取post,get参数,以及 爬虫 requests的get,post参数详解
|
4月前
|
数据采集 监控 JavaScript
函数计算操作报错合集之调用时报错:Error parsing headers: 'limit request headers fields',是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
JavaScript 前端开发 API
使用ort.js的create方法加载onnx模型报错:Fetch API cannot load file…… URL scheme “file“ is not supported.
使用ort.js的create方法加载onnx模型报错:Fetch API cannot load file…… URL scheme “file“ is not supported.
546 0
使用ort.js的create方法加载onnx模型报错:Fetch API cannot load file…… URL scheme “file“ is not supported.
|
10月前
【Express】—post传递参数
【Express】—post传递参数
|
JSON PHP 数据格式
PHP中json传递请求字符串网址函数http_build_query()与parse_str(),将POST参数组转换拼接成GET请求链接
PHP中json传递请求字符串网址函数http_build_query()与parse_str(),将POST参数组转换拼接成GET请求链接
132 0
|
编解码 前端开发 Java
axios 传递参数的方式(data 与 params 的区别)
axios 大家都非常的清楚,一个既可以用于客户端或者 服务端发送http请求的库。但是在前后端联调的时候有的时候会很难受,所以这里我来做一个总结。希望能帮助到有缘人。
axios 传递参数的方式(data 与 params 的区别)