python爬虫使用requests发送post请求示例详解


Posted in Python onAugust 05, 2020

简介

HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通过是根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。具体的编码方式包括:

application/x-www-form-urlencoded 最常见post提交数据的方式,以form表单形式提交数据。
application/json 以json串提交数据。
multipart/form-data 一般使用来上传文件。

一、 以form表单发送post请求

Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。
例:

# -*- coding: utf-8 -*-
# author:Gary
import requests

url = 'http://httpbin.org/post' # 一个测试网站的url
data = {'key1': 'value1', 'key2': 'value2'} # 你发送给这个的数据
r = requests.post(url, data=data) # 使用requests的post方法,data接受你想发送的数据
print(r.text) # 查看返回的内容

输出

{ 
“args”: {}, 
“data”: “”, 
“files”: {}, 
 #你提交的表单数据
“form”: { 
“key1”: “value1”,
“key2”: “value2” 
}, 
“headers”: { 
…… 
“Content-Type”: “application/x-www-form-urlencoded”, 
…… 
}, 
“json”: null, 
…… 
}

 可以看到,请求头中的Content-Type字段已设置为application/x-www-form-urlencoded,且data = {‘key1': ‘value1', ‘key2': ‘value2'}以form表单的形式提交到服务端,服务端返回的form字段即是提交的数据。

二、 以json形式发送post请求

可以将一json串传给requests.post()的data参数,

# -*- coding: utf-8 -*-
# author:Gary
import requests
import json

url = 'http://httpbin.org/post' # 一个测试网站的url
json_data = json.dumps({'key1': 'value1', 'key2': 'value2'}) # 你发送给这个的数据,数据格式转为json
r = requests.post(url, data=json_data) # 使用requests的post方法,data接受你想发送的数据
print(r.text) # 查看返回的内容

输出:

{ 
“args”: {}, 
“data”: “{\”key2\”: \”value2\”, \”key1\”: \”value1\”}”, 
“files”: {}, 
“form”: {}, 
“headers”: { 
…… 
“Content-Type”: “application/json”, 
…… 
}, 
“json”: { 
“key1”: “value1”, 
“key2”: “value2” 
}, 
…… 
}

可以看到,请求头的Content-Type设置为application/json,并将json_data这个json串提交到服务端中。

三、 以multipart形式发送post请求(上传文件)

Requests也支持以multipart形式发送post请求,只需将一文件传给requests.post()的files参数即可。

# -*- coding: utf-8 -*-
# author:Gary
import requests

url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')} # 目录下得有report.txt文件才能上传,rb是指以二进制格式打开一个文件用于只读。
r = requests.post(url, files=files) # 通过files参数指定你想发送的文件的内容
print(r.text)

输出:

{ 
“args”: {}, 
“data”: “”, 
“files”: { 
“file”: “Hello world!” 
}, 
“form”: {}, 
“headers”: {…… 
“Content-Type”: “multipart/form-data; boundary=467e443f4c3d403c8559e2ebd009bf4a”, 
…… 
}, 
“json”: null, 
…… 
}

文本文件report.txt的内容只有一行:Hello world!,从请求的响应结果可以看到数据已上传到服务端中。

到此这篇关于python爬虫使用requests发送post请求示例详解的文章就介绍到这了,更多相关python爬虫使用requests发送post请求内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中的yield使用方法
Feb 11 Python
Python中的yield浅析
Jun 16 Python
python获取本机mac地址和ip地址的方法
Apr 29 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python实现3D地图可视化
Mar 25 Python
解决echarts中饼图标签重叠的问题
May 16 Python
pandas提升计算效率的一些方法汇总
May 30 Python
python not运算符的实例用法
Jun 30 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 Python
8种常用的Python工具
Aug 05 #Python
浅析Python 序列化与反序列化
Aug 05 #Python
Python创建临时文件和文件夹
Aug 05 #Python
学习Python爬虫的几点建议
Aug 05 #Python
Python调用C/C++的方法解析
Aug 05 #Python
浅谈Python3中print函数的换行
Aug 05 #Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 #Python
You might like
也谈php网站在线人数统计
2008/04/09 PHP
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
ucenter通信原理分析
2015/01/09 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
Python实现的异步代理爬虫及代理池
2017/03/17 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
简单说说tomcat的配置
2013/05/28 面试题
生产部管理制度
2014/01/31 职场文书
优秀教师推荐材料
2014/12/16 职场文书
新学期家长寄语2016
2015/12/03 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
MYSQL如何查看进程和kill进程
2022/03/13 MySQL