版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/junli_chen/article/details/53670887

一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样:

请求行 
请求报头 
消息主体

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

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

2.7.1 以form形式发送post请求

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

# -*- coding: utf-8 -*-
import requests
import jsondef send_requests1():url = 'http://httpbin.org/post'd = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=d)return rdef send_requests2():url = 'http://httpbin.org/post's = json.dumps({'key1': 'value1', 'key2': 'value2'})r = requests.post(url, data=s)return rdef send_requests3():url = 'http://httpbin.org/post'files = {'file': open('report.txt', 'rb')}r = requests.post(url, files=files)return rif __name__ == "__main__":response1 = send_requests1()print '------ response1.text = ', response1.text# response2 = send_requests2()# print '------ response2.text = ', response2.text## response3 = send_requests3()# print '------ response3.text = ', response3.text

输出:

------ response1.text =  {"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.18.1"}, "json": null, "origin": "220.194.45.154, 220.194.45.154", "url": "https://httpbin.org/post"
}

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

2.7.2 以json形式发送post请求

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

# -*- coding: utf-8 -*-
import requests
import jsondef send_requests1():url = 'http://httpbin.org/post'd = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=d)return rdef send_requests2():url = 'http://httpbin.org/post's = json.dumps({'key1': 'value1', 'key2': 'value2'})r = requests.post(url, data=s)return rdef send_requests3():url = 'http://httpbin.org/post'files = {'file': open('report.txt', 'rb')}r = requests.post(url, files=files)return rif __name__ == "__main__":# response1 = send_requests1()# print '------ response1.text = ', response1.textresponse2 = send_requests2()print '------ response2.text = ', response2.text## response3 = send_requests3()# print '------ response3.text = ', response3.text

输出:

------ response2.text =  {"args": {}, "data": "{\"key2\": \"value2\", \"key1\": \"value1\"}", "files": {}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "36", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.1"}, "json": {"key1": "value1", "key2": "value2"}, "origin": "220.194.45.154, 220.194.45.154", "url": "https://httpbin.org/post"
}

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

2.7.3 以multipart形式发送post请求

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

# -*- coding: utf-8 -*-
import requests
import jsondef send_requests1():url = 'http://httpbin.org/post'd = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=d)return rdef send_requests2():url = 'http://httpbin.org/post's = json.dumps({'key1': 'value1', 'key2': 'value2'})r = requests.post(url, data=s)return rdef send_requests3():url = 'http://httpbin.org/post'files = {'file': open('report.txt', 'rb')}r = requests.post(url, files=files)return rif __name__ == "__main__":# response1 = send_requests1()# print '------ response1.text = ', response1.text# response2 = send_requests2()# print '------ response2.text = ', response2.textresponse3 = send_requests3()print '------ response3.text = ', response3.text

输出:

------ response3.text =  {"args": {}, "data": "", "files": {"file": "hello word!\n"}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "158", "Content-Type": "multipart/form-data; boundary=0562a8553c254ba298a69aa9e7fb477e", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.1"}, "json": null, "origin": "220.194.45.154, 220.194.45.154", "url": "https://httpbin.org/post"
}

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

Python 使用requests发送POST请求总结相关推荐

  1. Python 技术篇-requests发送post请求传文件给flask服务端报405、400问题解决方法

    这是我 flask 服务端的一块代码,可以看到有个 methods=['GET', 'POST'],如果没有这个参数,发送请求就会报 405,因为默认能只接收到 get 请求,接收不到 post 请求 ...

  2. Python 使用requests发送POST请求

    一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行  请求报头  消息主体 HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码 ...

  3. Python接口测试- requests 发送 post 请求的几种方法

    目录 前言: 发送 json 格式的数据 前言:  想了解更多相关知识请关注我吧!或者点击这里领取全套[软件测试/自动化测试]海量资料免费领取 POST 请求用于向服务器发送数据.与 get 相比更安 ...

  4. python post请求实例_Python使用requests发送POST请求实例代码

    本文研究的主要是Python使用requests发送POST请求的相关内容,具体介绍如下. 一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行 请求报头 消息主体 ...

  5. Python 使用 Scrapy 发送 post 请求的坑

    From:https://www.jb51.net/article/146769.htm 使用 requests 发送 post 请求 先来看看使用requests来发送post请求是多少好用,发送请 ...

  6. requests发送post请求的一些疑点

    requests发送post请求的一些疑点 前言 在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法.一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而 ...

  7. requests发送http请求

    requests发送http请求 发送请求:(数据获取.乱码解决) import requests response = requests.get('http://www.baidu.com') # ...

  8. python绘制蚊香形_Python requests发送post请求的一些疑点

    前言 在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法.一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而发送POST请求,有很多朋友不是很清楚,主要 ...

  9. python+pytest接口自动化框架(5)-requests发送post请求

    在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递. 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式 ...

最新文章

  1. 敏捷(Agile)与精益(Lean)对比
  2. Web 2.0背后的长尾理论
  3. 使用PowerDbg自动化Windbg调试过程
  4. c语言删除文件第一行_ElasticSearch 文档的删除和批量操作
  5. Qt网络编程之实例一GET方式
  6. figtree需要在JAVA下运行吗_Phylogenomic_Tutorial || ML_Tree inference
  7. SI4463模块配合WDS的快速上手指南
  8. ArrayList理解(1)初始化
  9. 1006: 组合的输出(dfs的一种用法)(与排列类似)
  10. 三.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---1.项目文件介绍(除主要源码部分)
  11. 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
  12. 死链提交为什么不能提交 html文件,百度提交网站后死链一直未处理掉的原因有哪些?...
  13. android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...
  14. pbrt1 Introduction
  15. 多商家父订单子订单_70多份订单被退回,商家查看信息傻眼了,美团:封店180天...
  16. 后羿采集器怎么导出数据_后羿采集器如何采集亚马逊评论
  17. python查阅文献
  18. sql server 数据库中null 转换为 0
  19. CSS 文字内容底部对齐
  20. LINUX kernel clock系统,基于内核4.4

热门文章

  1. mysql操作中 出现You can‘t specify target table for update in FROM clause错误的解决方法
  2. 迪威视讯:成为中国IDC落地重要力量
  3. 凝汽式汽轮机调节系统
  4. 微信小程序背景图片完全覆盖显示
  5. 生源985占比100%,北大叉院这个专业本校学生也心仪~
  6. 手机测试陨石软件,不用仪器检测,肉眼就能教你辨别你手上的陨石!
  7. 【数学】【2017.7.7普及】串
  8. Unity 2D随机地图
  9. SpringBoot:yaml配置注入bean
  10. 比KMP算法更简单更快的字符串匹配算法