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使用datetime模块计算各种时间间隔的方法
Mar 24 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
浅析Git版本控制器使用
Dec 10 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
python中set()函数简介及实例解析
Jan 09 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
基于Python打造账号共享浏览器功能
May 30 Python
python批量爬取下载抖音视频
Jun 17 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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 intval的测试代码发现问题
2008/07/27 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
简单的php购物车代码
2020/06/05 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
详解Django中的权限和组以及消息
2015/07/23 Python
Python线程之定位与销毁的实现
2019/02/17 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python 操作hive pyhs2方式
2019/12/21 Python
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
吨的认识教学反思
2014/04/27 职场文书
党员志愿者活动总结
2014/06/26 职场文书
学校交通安全责任书
2014/08/25 职场文书
快递员岗位职责
2014/09/12 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis