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入门篇之字典
Oct 17 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
简述Python2与Python3的不同点
Jan 21 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
python调用支付宝支付接口流程
Aug 15 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python实现天气查询软件
Jun 07 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实现webservice实例
2014/11/06 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
浅谈php的优缺点
2015/07/14 PHP
php设计模式之委托模式
2016/02/13 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
js word表格动态添加代码
2010/06/07 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
JS之相等操作符详解
2016/09/13 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
Python socket实现的文件下载器功能示例
2019/11/15 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
党员公开承诺书(2016最新版)
2016/03/24 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
在JavaScript中如何使用宏详解
2021/05/06 Javascript
vue实现移动端div拖动效果
2022/03/03 Vue.js