python post 请求json文件_requests的post请求提交表单、json串和文件数据讲解
HTTP协议中没有规定post提交的数据必须使用什么编码方式,服务端根据请求头中的Content-Type字段来获取编码方式,再对数据进行解析。具体的编码方式包括如下:
- application/x-www-form-urlencoded # 以form表单形式提交数据,最常见最熟悉
- application/json # 以json串提交数据。
- multipart/form-data # 上传文件
下面使用requests来发送上述三种编码的POST请求。
1、提交Form表单
requests提交Form表单,一般存在于网站的登录,用来提交用户名和密码。以 http://httpbin.org/post 为例,在requests中,以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。(httpbin.org 网站可以显示提交请求的内容,输出的”Content-Type”:”application/x-www-form-urlencoded”,证明这是提交Form的方式。)代码如下:
# -*- coding: utf-8 -*-
import requests
def get_html(url, key_value, retry=2):
try:
r = requests.post(url=url, headers=headers, data=key_value, timeout=5)
except Exception as e:
print(e)
if retry > 0:
get_html(url, retry - 1)
else:
page = r.text
return page
if __name__ == "__main__":
# 自定义请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
}
url = 'http://httpbin.org/post'
kw = {'wd': 'www.python66.com'}
html = get_html(url, kw)
print(html)
D:python3installpython.exe D:/python/py3script/test.py
{
"args": {},
"data": "",
"files": {},
"form": {
"wd": "www.python66.com"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "19",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
},
"json": null,
"origin": "223.72.81.198, 223.72.81.198",
"url": "https://httpbin.org/post"
}
Process finished with exit code 0
2、提交json串
对于提交json串(浏览器中抓包显示payload),主要是用于发送ajax请求中,动态加载数据。
可以用json.dumps()对dict进行编码,可以使用json参数直接传递,然后它就会被自动编码,在请求头中也不用显示声明 这是 2.4.2 版的新加功能。代码如下:
# -*- coding: utf-8 -*-
import requests
import json
def get_html(url, key_value, retry=2):
try:
r = requests.post(url=url, headers=headers, data=key_value, timeout=5)
except Exception as e:
print(e)
if retry > 0:
get_html(url, retry - 1)
else:
page = r.text
return page
def get_html_json(url, key_value, retry=2):
try:
r = requests.post(url=url, headers=headers, json=key_value, timeout=5)
except Exception as e:
print(e)
if retry > 0:
get_html_json(url, retry - 1)
else:
page = r.text
return page
if __name__ == "__main__":
# 自定义请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'Content-Type':'application/json; charset=UTF-8',
}
url = 'https://api.xxxx.com/xxx/xxx'
kw = {'domain': 'www.python66.com'}
# json.dumps
html = get_html(url, json.dumps(kw))
# 传递json参数
html_json = get_html_json(url,kw)
3.上传文件:
上传文件在爬虫中使用的很少。Content-Type类型为multipart/form-data,以multipart形式发送post请求,只需将一文件传给 requests.post() 的 files参数即可。还是以 http://httpbin.org/post 为例,代码如下:
# -*- coding: utf-8 -*-
import requests
def get_html(url, key_value, retry=2):
try:
r = requests.post(url=url, headers=headers, data=key_value, timeout=5)
except Exception as e:
print(e)
if retry > 0:
get_html(url, retry - 1)
else:
page = r.text
return page
if __name__ == "__main__":
# 自定义请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
}
url = 'http://httpbin.org/post'
files = {'file': open('ajax.png', 'rb')}
html = get_html(url, files)
print(html)
D:python3installpython.exe D:/python/py3script/test.py
{
"args": {},
"data": "",
"files": {
"file": "data:application/octet-stream;base64,...太长..省略..."
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "68870",
"Content-Type": "multipart/form-data; boundary=66f5b203f18f79960ac438c59af481b0",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
},
"json": null,
"origin": "223.72.72.67, 223.72.72.67",
"url": "https://httpbin.org/post"
}
Process finished with exit code 0
警告
建议用二进制模式(binary mode)打开文件,因为 Requests 可能会试图为你提供 Content-Length header,在它这样做的时候,这个值会被设为文件的字节数(bytes)。如果用文本模式(text mode)打开文件,就可能会发生错误。
python post 请求json文件_requests的post请求提交表单、json串和文件数据讲解相关推荐
- ajax使用pur请求怎么传参,jQuery使用ajaxSubmit()提交表单示例
ajaxSubmit(obj)方法是jQuery的一个插件jquery.form.js里面的方法,所以使用此方法需要先引入这个插件.如下所示: 复制代码 代码如下: 那么,如何通过ajaxSubmit ...
- php 利用fsockopen GET/POST 提交表单及上传文件
1.GET get.php [php] view plaincopy <?php $host = 'demo.fdipzone.com'; $port = 80; $errno = ''; $e ...
- php curl 发送checkbox,使用curl 提交表单(多维数组+文件)数据到服务器的有关问题...
使用curl 提交表单(多维数组+文件)数据到服务器的问题 我在本地搭了一个测试服务器,Apache+PHP,想使用curl自动提交表单数据到远程服务器. 远程服务器表单有两项数据需要提交: 1.in ...
- python网页提交表单_使用Python中的POST请求通过网站表单上传基本文件
我尝试使用Python和HTTP请求在一个随机的网站上上传一个文件.为此,我使用名为Requests的便利库. 根据the documentation,以及StackOverflow here和the ...
- Android Okhttp3的使用(很全面,包含Post提交字符串、键值对、表单、上传文件、无参请求和Get有参无参请求,还有自动添加token)
Okhttp简介 okhttp是现代化应用程序的网络通信的方式.它用来帮助程序交换数据和媒体信息,使用okhttp可以让你的程序加载物料(翻译为服务器数据更合适在)更加高效.更节省网络带宽. okht ...
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...
- Form表单 JSON Content-type解析
1 表单Form概述 在Form表单中,参数一般有:action 表单提交的urlmethod 提交方式:post getname 表单的属性名enctype 提交数据的编码格式 2 常见的编码方式与 ...
- ajax c 提交form,使用ajax提交form表单,包括ajax文件上传
前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的aja ...
- AJAX 提交表单以及文件上传
本文转自:https://www.cnblogs.com/zhuxiaojie/p/4783939.html#autoid-0-0-0 作者:朱小杰 前言 使用ajax请求数据,很多人都会,比如说: ...
- 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html...
使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){... },&quo ...
最新文章
- JDOM是JAVA中最常用的一种解析XML的工具
- php 反序列化漏洞简介
- android 字体颜色选择,Android中颜色选择器和改变字体颜色的实例教程
- OpenFeign封装为springboot starter
- C 中细节问题的试题
- 缠中说禅股票交易系统图解 z
- 蓝牙BLE芯片PHY6222之SPI驱动ST7789
- 三维空间的位姿描述和齐次变换
- 数据结构——基数排序(经典以空间换时间案例)
- 介孔二氧化硅纳米粒子应用在组织工程
- 8个优秀的预训练模型,帮助您开始使用自然语言处理(NLP)
- 百度技术:“App 优化网络,先从 HTTPDNS 开始” | 原理到实战
- 求100到1000内水仙花数及个数
- 太和二中计算机考试,太和二中网上阅卷系统|翰林金榜太和二中查分系统 网页版_最火手机站...
- To the MAX(蓝书刷题记录)
- mysql多列索引(组合索引)特点和使用场景
- Elasticsearch 6 Mapping设置
- 怎么样才能让自己自律起来_怎样才能让自己真正的自律起来?
- 雨流计数法及matlab代码【转载】
- 桌面窗口小部件添加List