学习记录: requests 不同请求方式传参和常用的方法

这篇具有很好参考价值的文章主要介绍了学习记录: requests 不同请求方式传参和常用的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

requests库常用的方法

  requests.Request(url) 构造一个请求,支持以下各种方式

  requests.get() 发送get请求

  requests.post() 发送post请求

  requests.head() 获取HTML的头部信息

  requests.put() 发送put请求

  requests.patch() 提交局部修改的请求

  requests.delete() 提交删除请求

requests库的使用

  语法构造

    requests.get(url,params=None)

  参数说明

    url:需要爬取的网站和网址

    params:请求参数

  该方法的结果为Response对象,包含服务器的响应信息

response对象的常用属性

  response.staue_code 响应状态码

  response.content 把response对象转换为二进制

  response.text 把response对象转换为字符串数据

  response.encoding 定义response对象的编码

  response.cookies 获取请求后的cookie

  response.url 获取请求网址

  response.json() 内置的json解码器

  Response.headers 以字典对象存储服务器响应头,字典键不区分大小

1、不带参数的get请求

import requests
url = 'https://www.baidu.com/'
resp = requests.get(url)
#设置响应的经编码格式
resp.encoding='utf-8'
cookie = resp.cookies #获取请求后的cookie信息
headers = resp.headers #以字典对象存储服务器响应头,字典键不区分大小
print('响应状态码:',resp.status_code)
print('请求后的cookie:',cookie)
print('获取请求的网址:',resp.url)
print('响应头:',headers)
print('响应内容:',resp.text)

2、带参数的get请求

URL只支持ASCII(美国标准码),在实际的传输过程中,中文及一些特殊字符需要经过urlencode(URL编码)。如上例中的接口地址会被编码成:
https://xxx.com/get?name=%E4%B8%B4%&age=xxx

import requests 

url = "https://xxx.com/api"
params = {"key":"xxx","info":"xxx"} # 字典格式,单独提出来,方便参数的添加修改等操作
res = requests.get(url=url, params=params) 
print(res.text)  

.get()方法中,参数params后面跟着是一个字典,requests会自动帮我们把这个参数拼接在接口请求地址中

import requests 

url = 'https://www.xxx.com/xxx'
# 请求头
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE"}
resp = requests.get(url,headers=headers)
resp.encoding = 'utf-8'
print(resp.text)

3、传统表单类POST请求(x-www-form-urlencoded)

import requests 

url = "https://xxx.com"
data = {"name": "xxx", "age": xxx} # Post请求发送的数据,字典格式
res = requests.post(url=url, data=data) # 这里使用post方法,参数和get方法一样
print(res.text)  

4、JSON类型的POST请求(application/json)

import requests 

url = "https://xxx.com"
data = '''{
        "name": "xxx",
        "age": xxx
        }''' # 多行文本, 字符串格式,也可以单行(注意外层有引号,为字符串) data = '{"name": "xxx", "age": xxx}'
res = requests.post(url=url, data=data) #  data支持字典或字符串
print(res.text)  

data参数支持字典格式也支持字符串格式,如果是字典格式,

requests方法会将其按照默认表单urlencoded格式转换为字符串,如果是字符串则不转化
如果data以字符串格式传输需要遵循以下几点:

必须是严格的JSON格式字符串,里面必须用双引号,k-v之间必须有逗号,布尔值必须是小写的true/false等等不能有中文,直接传字符串不会自动编码

一般来说,建议将data声明为字典格式(方便数据添加修改),然后再用json.dumps()方法把data转换为合法的JSON字符串格式

import requests 
import json # 使用到JSON中的方法,需要提前导入

url = "https://xxx.com"
data = {
        "name": "xxx",
        "age": xxx
        }  # 字典格式,方便添加
headers = {"Content-Type":"application/json"} # 严格来说,我们需要在请求头里声明我们发送的格式
res = requests.post(url=url, data=json.dumps(data), headers=headers) #  将字典格式的data变量转换为合法的JSON字符串传给post的data参数
print(res.text)  

或直接将字典格式的data数据赋给post方法的JSON参数(会自动将字典格式转为合法的JSON文本并添加headers)

import requests 

url = "https://xxx.com/api/v2"
data = {
    "reqType":xxx,
    "perception": {
        "inputText": {
            "text": "xxx"
        },
        "inputImage": {
            "url": "xxx"
        },
        "selfInfo": {
            "location": {
                "city": "xxx",
                "province": "xxx",
                "street": "xxx"
            }
        }
    },
    "userInfo": {
        "apiKey": "xxx",
        "userId": "xxx"
    }
} 
res = requests.post(url=url, json=data) # JSON格式的请求,将数据赋给json参数
print(res.text)  

5、发送XML格式的数据


XML和JSON都属于Raw格式的数据,XML和JSON在Python中实际都是不同格式的文本字符串。我们将字符串传递给请求方法的data参数即可原样发送,即data参数有以下3重作用:

1)data = {} 或 [(,), (,)]:接受一个字典或嵌套列表格式的数据,会按表单Url编码格式
2)data = ‘’:接受一个字符串或bytes二进制字符串,会原样发送(需要手动添加请求头,如果存在中文需要手动编码)
3)data = open(’…’, ‘rb’):接受一个文件对象,按binary格式流式上传。
发送XML格式的数据只要将XML格式的多行字符串传递给请求方法的data参数即可,示例如下。

import requests
url = 'https://xxx.com/post'
xml_data = '''
<xml>
    <name>xxx</name>
    <age>xxx</name>
</xml>
'''
headers = {'Content-Type': 'application/xml'}

res = requests.post(url, data=xml_data.encode('utf-8'), headers=headers)
print(res.text)

由于xml_data数据中存在非ASCII码,需要将数据按utf-8格式编码为bytes二进制字符串发送。由于使用Raw格式发送数据时不会自动添加请求头,因此一般要手动在请求头中添加内容类型声明,并将构造的字典类型的请求头变量,传递给请求方法的关键字参数headers。

6、发送Multipart/form-data请求(文件上传)


网页上的表单有两种,一种是不包含文件上传,所有用户输入或选择的数据都可以使用字符串格式表示,这种称为普通表单或纯文本表单,对应MIME类型为application/x-www-form-urlencoded。

另一种即包括普通输入框等,也包含一个或多个文件上传框。普通输入框中的变量值可以已字符串格式编码,而上传的文件(如图片文件)则不一定能直接转为字符串,要使用二进制格式。因此要使用多部分的混合格式,笔者称之为混合表单,对应MIME类型为multipart/form-data。在表单中,每个需要上传的文件和普通输入框一样对应一个指定的变量。因此同样可以使用字典格式组装混合表单的请求数据传递给请求方法的files参数即可,示例如下。

import requests
url = 'https://xxx.com/post'
multi_form_data = {
    'name': 'xxx',
    'age': 'xxx',  # 不能使用int类型
    'avatar': open('/Users/apple/Pictures/robot.png', 'rb'),
    'avatar2': open('/Users/apple/Pictures/robot.jpg', 'rb'),
}

res = requests.post(url, files=multi_form_data)
print(res.text)

表单数据中的数字要使用字符串格式的数字,文件要以rb二进制格式打开传输,支持多个变量以及多个文件。

文件类型的数据avatar可以只穿一个打开的文件对象open(’/Users/apple/Pictures/robot.png’, ‘rb’),也可以传递三个参数:要保存的文件名,打开的文件及文件MIME类型,即

‘avatar’: (‘robot.png’, open(’/Users/apple/Pictures/robot.png’, ‘rb’), ‘image/png’),

比如有些接口上传Excel文件时必须声明文件名和MIME类型,如:文章来源地址https://www.toymoban.com/news/detail-707413.html

res = request.post(url, files={'upload_file': 
        ('data.xlsx', 
        open('data.xlsx', 'rb'),
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    })

7、发送Binary格式数据(单文件/流式上传)

import requests
url = 'https://xxx.github.com/post'

res = requests.post(url, data=open('/Users/apple/Pictures/xxx.jpg', 'rb'))
print(res.text)

到了这里,关于学习记录: requests 不同请求方式传参和常用的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序wx.navigateToMiniProgram跳转传参和接收参数

    小程序wx.navigateToMiniProgram跳转传参和接收参数 看了好多没有具体的步骤,自己写一下 传参 wx.navigateToMiniProgram({ appId: \\\'\\\', path: \\\'page/index/index?id=123\\\', extraData: { foo: \\\'bar\\\' }, envVersion: \\\'develop\\\', success(res) { // 打开成功 } }) 对应小程序接收参数 需要在app.js App.onLaunch , App.onShow 中接收,数

    2024年02月09日
    浏览(48)
  • 微信小程序使用路由传参和传对象的方法

    近期在做微信小程序开发,在页面跳转时,需要携带参数到下一个页面,尤其是将对象传入页面。为了方便重温,特此记录。 传递字符串参数比较简单。路由跳转有两种方式,一种是通过navigator组件的url完成,另一种是使用wx.navigateTo()跳转。wxml代码如下: 需要通过按钮的方

    2024年02月06日
    浏览(47)
  • 【小程序】uni-app 页面的传参和接参

    值得一提的是小程序只能使用字符串的方式进行传递,不像vue的路由传参。至于为什么要这样,这就需要看文档怎么说了。 注意:传递参数只能以 ?key=valuekey=value 方式传递 使用 onLoad() 钩子函数来接收 小程序只能以 字符串的方式进行传递和接收,那么复杂类型对象和数组怎

    2024年02月02日
    浏览(54)
  • 微信小程序如何实现页面传参和页面传递多个参数

    只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递,下面我总结了 4 种页面方法。 下面时多个参数页面传参的方式   通过在url后面拼接参数,参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 分隔;如 ‘path?key=valuekey2=value2’。 案例:

    2024年02月11日
    浏览(79)
  • jar程序部署的外部依赖和按名传参和shellUtil传参json串及返回pid问题

    java -cp 命令跟jar路径和指定的编译类(main)路径; java -jar 跟jar路径也ok,但是需要打包的时候指定 jar包里的 MANIFEST.MF 文件中 Main-Class项的值 。即默认运行的main函数。 使用getopts命令。 getopts命令识别出各个入参选项之后(用:分隔),遍历case判断。其操作中,有两个\\\"常量

    2024年02月16日
    浏览(38)
  • Get请求中三种传参方式解读

    这几天我在看go-zero框架,实现了一个简单的单体服务,但是使用postman测试接口的时候遇到点问题 error:field id is not set。就是说请求的参数解析失败 发现是我的入参的tag标签和传参对不上 一、使用form标签(最常用) form标签就是最常用的一种,form就是表单的意思,通过url传

    2023年04月21日
    浏览(41)
  • axios的post请求所有传参方式

    Axios支持多种方式来传递参数给POST请求。以下是一些常见的方式: 作为请求体: 你可以将参数作为请求体的一部分,通常用于发送表单数据或JSON数据。例如: 作为URL参数: 你可以将参数作为URL的一部分,通常用于RESTful风格的API。例如: 作为查询字符串参数: 你可以将

    2024年02月04日
    浏览(35)
  • 接口测试 Jmeter 接口测试 —— 请求 Headers 与传参方式

    在使用 Jmeter 进行接口测试时,有些小伙伴不知道 Headers 和请求参数 (Parameters,Body Data) 的联系,本文主要讲 Content-Type 为 application/x-www-form-urlencoded 和 application/json 的场景。 1、使用 Parameters 时,Content-Type 要么不传,要么传 application/x-www-form-urlencoded,因为不传时默认值就是

    2024年02月08日
    浏览(42)
  • 前端post,get请求传参方式 以及后台接收

    post请求: 1:js中 2:使用 首先引入方法js: 调用方法 3:浏览器请求 4:后台参数接收 get请求: 第一种:通过params对象传递,将参数以键值对的形式传递,当传递的参数为多个时,浏览器会自动拼接进行分割 1:js中 2:使用 首先引入方法js: 调用方法 3:浏览器请求 4:后台

    2024年02月10日
    浏览(43)
  • WebSocket建立连接传参常用方式

    近期在做一个物联网项目,需要实现页面的实时更新,这里考虑到用websocket来实现,对于让项目支持websocket这个在springboot中基于spring-boot-starter-websocket来构建是一件很简单的事情,本文就不赘述了。本文主要就建立websocket时如何传参进行说明 当我们的一个web站点,既有普通的

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包