python自动提交表单_python接口自动化二(发送post请求)_weixin_39875629的博客-程序员秘密

技术标签: python自动提交表单  

前言

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

请求行

请求报头

消息主体

HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。

服务端通过是根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。

具体的编码方式包括:

application/x-www-form-urlencoded

最常见post提交数据的方式,以form表单形式提交数据。

application/json

以json串提交数据。

multipart/form-data

一般使用来上传文件。

三种编码请求实例

1.提交Form表单

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

2.提交json串

错误写法:json格式data参数不能传送字典,不然运行会报错

headers可以用fiddler去抓取

即使写上了 'Content-Type':'application/json; charset=UTF-8' ,返回依然出错了,原因就在于 你的请求实体的格式错了,服务端无法解码。

正确写法

1.import json用json.dumps将字典转换成json格式

r = requests.post(url=url,data=json.dumps(data),headers=headers)

2传参数时直接使用json,这个方法headers里面不用再传"Content-Type":"application/json; charset=UTF-8"

r = requests.post(url=url,json=jdata,headers=headers)

3.上传文件

上传文件在爬虫中使用的很少,不过还是使用requests讲解一下使用方式。

Content-Type类型为multipart/form-data,以multipart形式发送post请求,只需将一文件传给requests.post()的files参数即可。还是以http://httpbin.org/post 为例,

代码如下:

url = 'http://httpbin.org/post'files= {'file': open('upload.txt', 'rb')}

r= requests.post(url, files=files)print(r.text)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39875629/article/details/110547514

智能推荐

使用NGINX反向代理做小偷站_weixin_33788244的博客-程序员秘密

用Nginx的反向代理可以轻松山寨对方的网站,但是反向代理后的网站还是有对方的绝对链接时,怎么办?所以要用替换链接方法。1 使用官方的的模块 编译参数–with-http_sub_moduleub_filter 源网站链接 替换自己的链接;sub_filter_once off;只能匹配1行http://wiki.nginx.org/HttpSubModule2 使用第三方模块svn ...

ZOJ 3450 Doraemon's Railgun (DP·分组背包)_zoj 3769_virgoDd的博客-程序员秘密

题意  多啦A梦有一个超电磁炮  然后要打死n堆敌人  在同一条射线上的敌人只有先打死前面的一堆才能打后面的一堆  给你打死某堆敌人需要的时间和这堆敌人的人数   问你在T0时间内最多打死多少个敌人分组背包问题  先要把同一条射线上的敌人放到一个分组里  后面的敌人的时间和人数都要加上前面所有的  因为只有前面的都打完了才能打后面的  然后每组最多只能选择一个   判断共线用向量处理  

mongodb使用find()指定id查询报错,ObjectId失败问题_mongodb find _id_weixin_46182770的博客-程序员秘密

1.首先报错如下:UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "“604b59d1dd9be83f3c0d3f77"” at path “_id” for model “User”at model.Query.exec (F:\前端练习2\黑马vue\article-blog\[email protected]@mongoose\lib\query.js:4358:2

在运行进行视频检测的代码时报错:ModuleNotFoundError: No module named 'libbgs'_Mary_Wu233333的博客-程序员秘密

在运行进行视频检测的代码时报错错误:ModuleNotFoundError:No module named’libbgs’##导致这个错误的原因是没有构建BGSLibrary, 1、参考下列链接进行配置(我的系统是linux+anaconda+python3进行配置) https://github.com/andrewssobral/bgslibrary/wiki/Wrapper:-Pyt...

RDP协议之USB重定向虚拟通道_weixin_34304013的博客-程序员秘密

在RDP远程桌面协议中,USB设备虚拟通道扩展协议用于将USB数据包从终端服务器传输到终端客户端。终端客户端将USB数据包转发到物理USB设备。然后客户端在物理设备重新组装数据包后返回结果。 一般来说,远程访问的协议可以重定向USB设备,所以在使用和过程中,必须为客户端提供一种方式来指定使用该协议重定向的USB设备,或者选择使用替代方法的设备或者完全不重定向的设备...

联想小新如果使用蓝牙鼠标在关闭了触摸板的情况下不小心关掉了蓝牙该如何处理?_囚蕤的博客-程序员秘密

当你的电脑设备是联想小新+无线蓝牙鼠标时,有时候在敲代码敲得正激情四射的时候,不小心按了个F8(快捷键开启飞行模式)导致WIFi和蓝牙直接关闭.而联想小新又是出了名的触摸板不好使.这时候就面临一个比较尴尬的处境:你没有"鼠标"了.针对这种情况,可以考虑键盘快捷键去恢复.然后按Tab键将光标切换到[系统]上,当然如果不小心按了多次可以通过[shift+Tab]来回退.之后连按[Tab键](我这里是两下就可以直接将光标跳转到[添加蓝牙或其他设备]上)之后按[Tab]键将光标移动到蓝牙的开关按钮上。...

随便推点

VS2017配置PCL1.9(win10环境)(自己探索的,在别的博客上面进行细节补充。分享学习)_哎呦有趣的博客-程序员秘密

以下是别的博主的博客内容,可以参考。我会对一些细节进行补充。博主地址(转载):你们可以去看一下。https://blog.csdn.net/weixin_41991128/article/details/83864713**由于实验需要用到点云数据,正好网上搜PCL点云库的时候看到PCL1.9出来了,就索性跟随时代的步伐直接在VS2017上安装PCL1.9试一下。文章目录VS2017下载与安装PCL1.9.0下载与安装1.下载2.安装VS2017配置PCL1.9.01.系统环境变量2.

一维搜索---黄金分割法_铿锵的玫瑰的博客-程序员秘密

参考网址:https://blog.csdn.net/shenziheng1/article/details/51317801https://www.jianshu.com/p/beea2b4447c8原理算法流程算法a = 1;b = 4;Err = 0.001;T = 0.618;c = a+(1-T)*(b-a);d = b-(1-T)...

麦当劳免费wifi热点(帐号,密码)_diezhi9415的博客-程序员秘密

麦当劳的wifi账号:McDonald-OCwifi密码:Ac28Idfjla92ifjsl3jsHdowIo(一定要注意大小写)麦当劳免费wifi热点,全国通用。但是麦当劳的免费热点是隐藏wifi,需要手动添加才行。转载于:https://www.cnblogs.com/visen-0/archive/2011/08/09/2132670.html...

html中在线预览pdf文件之pdf在线预览插件_html pdf在线预览_tizzybepeacejoy的博客-程序员秘密

html中在线预览pdf文件之pdf在线预览插件最近遇到一个需求,要在html页面查看pdf生成的pdf文件!翻来覆去找到两种办法 ,最后采用了jquery.media.js插件方式一将pdf转为图片保存,然后再把图片的地址发到页面进行显示。遇到的困难,pdf转为图片时中文可能会乱码!缺点:生成图片会占用服务器内存。方式二通过js插件在线预览pdf (这里推荐第3中插件)js...

Python入门之类的基础语法_Hard Coder的博客-程序员秘密

第一关:类的声明与定义代码:# 请在下面填入定义Book类的代码########## Begin ##########class Book(object):########## End ########## '书籍类' def __init__(self,name,author,data,version): self.name = name self.author = author self.data = data

linux常用命令_yzq-3841的博客-程序员秘密

linux常用命令linux下退出mysql:quit或者exitvim的一些操作:a:进入到编制模式\n:换行esc:进入到命令模式:跳到最后一行:x 退出保存:wq 退出保存:q! 退出不保存查看java进程:ps -ef|grep java查看tomcat进程: ps -ef|grep tomcat查看进程端口号: netstat -ntulp|grep 进程号查看某个进程占用的端口号:netstat -nap | grep [pid]杀死进程:kill -9 进程号

推荐文章

热门文章

相关标签