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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Python查找第n个子串的技巧分享
Jun 27 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python实现windows壁纸定期更换功能
Jan 21 Python
详解Python装饰器
Mar 25 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
Python实现aes加密解密多种方法解析
May 15 Python
python等待10秒执行下一命令的方法
Jul 19 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
在Windows版的PHP中使用ADO
2006/10/09 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
跟老齐学Python之Python文档
2014/10/10 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python设置中文界面实例方法
2020/10/27 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
为什么使用接口?
2014/08/13 面试题
什么是反射
2012/03/17 面试题
幼儿园教师辞职信
2014/01/18 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
校园广播稿100字
2014/10/06 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python
Python循环之while无限迭代
2022/04/30 Python