Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python requests 发送 post 请求的三种方式

Python requests 发送 post 请求的三种方式

作者头像
为为为什么
发布于 2024-06-27 01:24:19
发布于 2024-06-27 01:24:19
2.3K0
举报
文章被收录于专栏:又见苍岚又见苍岚

在http 协议中,post 提交的数据需放在消息主体的,但协议并没有规定必须使用什么编码方式,从而导致了提交方式的不同。本文记录 form 表单、json和文件三种post方式。

简介

http 协议中,post 提交的数据需放在消息主体的,但协议并没有规定必须使用什么编码方式,从而导致了提交方式的不同。服务端根据请求同一种的 Content-Type 字段来获取请求中消息主体是用何种方式进行编码,再对消息主体进行解析。

具体的编码方式有:

  • application/x-www-form-urlencoded # 以 form 表单形式提交数据,最常见也是大家最熟悉的
  • application/json # 以 json 串提交数据。
  • multipart/form-data # 上传文件

提交Form 表单

“Content-Type”: “application/x-www-form-urlencoded”

requests 提交Form表单,一般存在于网站的登录,用来提交用户名和密码。以 http://httpbin.org/post 为例,在 requests 中,以 form 表单形式发送 post 请求,只需要将请求的参数构造成一个字典,然后传给requests.post()data 参数即可。

代码如下:

12345

import requestsurl = "http://httpbin.org/post"d = {"key1":"value1","key2":"value2"}r = requests.post(url, data=d) # requests.post() 中利用 data 属性print(r.text)

输出效果如下:

12345678910111213141516171819202122

{"args": {},"data": "","files": {},"form": {"key1": "value1","key2": "value2"},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Content-Length": "23","Content-Type": "application/x-www-form-urlencoded","Host": "httpbin.org","User-Agent": "python-requests/2.22.0","X-Amzn-Trace-Id": "Root=1-60c06a74-78d1256647615a962d76bf9b"},"json": null,"origin": "219.133.170.253","url": "http://httpbin.org/post"}

httpbin.org 网站可以显示你提交请求的内容,输出的”Content-Type”:”application/x-www-form-urlencoded”,证明这是提交Form的方式。

提交json串

“Content-Type”: “application/json”

对于提交json串,主要是用于发送ajax请求中,动态加载数据。

写法一

把data进行json编码,再发送。

12345678910111213141516171819

import requestsurl = "http://lazytools.feidee.cn/v1/qrcode/log"data = { "category": 0, "content": "。。。。。hahha'a", "source": 1}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat","Accept-Encoding": "gzip, deflate","Accept": "application/json, text/javascript, */*; q=0.01","Connection": "keep-alive","Content-Type": "application/json","Host": "lazytools.feidee.cn" }r = requests.post(url=url,data=json.dumps(data),headers=headers) # 利用 json 对 字典序列化print(r.text)

写法二

处理将data主动编码为json发送之外,requests还提供了一个json参数,自动使用json方式发送,而且在请求头中也不用显示声明 ‘Content-Type’:‘application/json; charset=UTF-8’。

123456789101112131415161718

import requestsurl = "http://lazytools.feidee.cn/v1/qrcode/log"data = { "category": 0, "content": "hahha", "source": 1}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat","Accept-Encoding": "gzip, deflate","Accept": "application/json, text/javascript, */*; q=0.01","Connection": "keep-alive","Host": "lazytools.feidee.cn" }r = requests.post(url=url,json=data,headers=headers) # 直接把字典传给 requests.post() 的 json 参数print(r.text)

上传文件

“Content-Type”: “application/x-www-form-urlencoded”

Content-Type类型为multipart/form-data,以multipart形式发送post请求,只需将一文件传给 requests.post() 的files参数即可。

123456

import requestsurl = 'http://httpbin.org/post'files = {'file': open('upload.txt', 'rb')}r = requests.post(url, files=files) # 文件传给 requests.post() 的 files 参数print(r.text)

参考资料

文章链接: https://cloud.tencent.com/developer/article/2432241

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-6-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python接口测试之requests详解
接口自动化的框架很多,python对应的类库也很多,但request类库相信对大家来说还是最熟悉的,本篇将围绕request给大家介绍接口自动化中常用的功能。
周辰晨
2020/02/19
4490
熟悉POST提交数据的4种方式,接口测试更高效
Hi,大家好。我们都知道POST一般用于向服务端提交数据,POST提交数据的 4 种格式即Content-Type的4种形式,尤其注意每种格式中http发送请求时body中数据的格式。4种形式分别是:
可可的测试小栈
2021/12/10
2.1K0
熟悉POST提交数据的4种方式,接口测试更高效
《手把手带你学爬虫──初级篇》第2课 Requests库讲解
Requests是一常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。
GitOPEN
2019/01/12
9940
《手把手带你学爬虫──初级篇》第2课 Requests库讲解
python接口自动化18-requests-toolbelt处理multipart/form-data
一、requests-toolbelt 1.官方文档地址:[requests-toolbelt官方文档](https://pypi.python.org/pypi/requests-toolbelt/) 2.环境安装 > pip install requests-toolbelt 二、multipart/form-data传文件 ``` from requests_toolbelt import MultipartEncoder import requests m = MultipartEncoder(
企鹅号小编
2018/03/02
4.1K0
python接口自动化18-requests-toolbelt处理multipart/form-data
Python爬虫requests库详解
上一节中,我们了解了 urllib 的基本用法,但是其中确实有不方便的地方,比如处理网页验证和 Cookies 时,需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作,就有了更为强大的库 requests,有了它,Cookies、登录验证、代理设置等操作都不是事儿。
仲君Johnny
2024/02/05
8990
Python爬虫requests库详解
python requests模块
使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)
用户5760343
2019/07/27
1.4K0
python接口自动化(十)--post请求四种传送正文方式(详解)
  post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等。我们要知道post请求四种传送正文方式首先需要先了解一下常见的四种编码方式:
北京-宏哥
2019/09/11
3.6K0
python接口自动化(十)--post请求四种传送正文方式(详解)
requests发送post请求,你真的明白吗?
前言 在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法。一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而发送POST请求,有很多朋友不是很清楚,主要是因为容易混淆POST提交的方式。今天在微信交流群里,就有朋友遇到了这种问题,特地讲解一下。 在HTTP协议中,post提交的数据必须放在消息主体中,但是协议中并没有规定必须使用什么编码方式,从而导致了提交方式的不同。服务端根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码
七夜安全博客
2018/06/26
1K0
python requests
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
forxtz
2022/05/10
1.7K0
Python接口自动化——Requests
前面我们介绍了接口测试工具:Postman和Jmeter。利用接口测试工具上手使用虽然容易,但是还是不够灵活。例如需要界面上各种配置,有时还需限定的语言脚本来辅助(Postman限定使用Js,Jmeter限定使用Java)
清风穆云
2021/08/09
8330
[331]python之requests的基本使用
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。
周小董
2022/04/12
5760
[331]python之requests的基本使用
Python学习笔记(五) requets多种请求参数
Python学习笔记(五) requets多种请求参数 1. application/x-www-form-urlencoded数据格式 url = 'http://api.newibao.com
java攻城狮
2020/10/10
6700
Python学习笔记(五) requets多种请求参数
Python3网络爬虫实战-24、req
在前面一节我们了解了 Urllib 的基本用法,但是其中确实有不方便的地方。比如处理网页验证、处理 Cookies 等等,需要写 Opener、Handler 来进行处理。为了更加方便地实现这些操作,在这里就有了更为强大的库 Requests,有了它,Cookies、登录验证、代理设置等等的操作都不是事儿。
py3study
2020/01/06
8690
Python网络爬虫(五)- Requests和Beautiful Soup1.简介2.安装3.基本请求方式5.程序中的使用4.BeautifulSoup4
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。
Python攻城狮
2018/08/23
9560
Python网络爬虫(五)- Requests和Beautiful Soup1.简介2.安装3.基本请求方式5.程序中的使用4.BeautifulSoup4
《手把手带你学爬虫──初级篇》第2课 Requests库讲解
Requests是一常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。
GitOPEN
2019/01/29
8990
《手把手带你学爬虫──初级篇》第2课 Requests库讲解
python3+requests:pos
前言:post请求我在python接口自动化2-发送post请求详解(二)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等,可以参考Get,Post请求方式经典详解进行学习一下。
py3study
2020/01/13
2.1K0
Python Requests Post for 5 Styles
最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype属性,那么最终就会以 application/x-www-form-urlencoded方式提交数据。请求类似于下面这样:
happy123.me
2019/12/30
6390
Python接口自动化-3-POST请求
POST请求 HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通过是根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。具体的编码方式包括: application/x-www-form-urlencoded 最常见post提交数据的方式,以form表单形式提交数据。 application/json 以json串提交数据 以form形式发送请求 Reqeusts支持以form表单形式发送post请求
企鹅号小编
2018/02/27
9120
Python接口自动化-3-POST请求
Python爬虫--Requests 库用法大全
昨晚分享了Python爬虫的基本知识,本文分享一下爬虫里面请求相关的内容:Requests 用法。
用户9925864
2022/07/27
7040
Python爬虫--Requests 库用法大全
Requests 库 | 不可胜数的 Python 第三方库
标准库的内容已经非常多了,我在前面的文章中已经介绍了七八个,没看的可以回头找着去看看。虽然介绍了不少,但是 Python 给编程者的支持不仅仅在于标准库,它还有不可胜数的第三方库。
编程文青李狗蛋
2019/11/07
4290
相关推荐
Python接口测试之requests详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档