惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
B
Blog
U
Unit 42
B
Blog RSS Feed
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
腾讯CDC
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
博客园 - 聂微东
MyScale Blog
MyScale Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
Engineering at Meta
Engineering at Meta

老董笔记

尚硅谷机构在哪?尚硅谷培训怎么样?靠谱吗-互联网IT百科 韩顺平介绍,传智讲师,开办泰牛,入尚硅谷等一系列-互联网IT百科 pandas多重索引标准样式(写入excel有空行)-互联网IT百科 cannot join with no overlapping index names-互联网IT百科 pandas多列变多行(即宽表变长表)melt和stack函数-互联网IT百科 pandas多行转多列(长表变宽表)pivot和unstack-互联网IT百科 Index contains duplicate entries, cannot reshape完美解决-互联网IT百科 single positional indexer is out-of-bounds-互联网IT百科 Can only compare identically-labeled Series objects-互联网IT百科 pandas transform用法详解(多个案例)-互联网IT百科 python四舍五入精确实现-互联网IT百科 pandas的groupby使用apply分组排序-互联网IT百科 index 0 is out of bounds for axis 0 with size 0-互联网IT百科 pandas分组过滤filter函数-互联网IT百科 联想Win10系统如何禁用触摸屏关闭触摸-互联网IT百科 groupby分组计算transform转换返回相同长度序列-互联网IT百科 brooks seo教程python教程,brooks seo教程网盘,布鲁seo资源-互联网IT百科 电脑右键文件夹一直转圈电卡死怎么回事-互联网IT百科 施琪嘉的心理成长课(荐)-互联网IT百科 百度SEO公司_SEO推广公司哪家好_SEO外包服务如何选-老董笔记 groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数-互联网IT百科 pandas的groupby单列多列分组聚合运算-互联网IT百科 DataFrameGroupBy对象及分组个数、分组大小、组名索引、组数据详解-互联网IT百科 pandas中groupby之Grouper and axis must be same length-互联网IT百科 pandas中groupby的分组原理-互联网IT百科 pandas的groupby的使用详解大全-互联网IT百科 openpyxl单元格自动换行强制换行Alignment(wrapText=True)-互联网IT百科 python教程全套(可就业)-互联网IT百科 联想win10系统CPU显示100%,电脑呼呼响怎么回事-互联网IT百科 如何自制CPU,CPU原理是怎么样的?-互联网IT百科
requests的post请求提交表单的2种方式-互联网IT百科
2021-11-11 · via 老董笔记

  POST请求在上网中也很常见,诸如注册登录、购物提交等。我们可以写1个最简单的浏览器表单示例。

<form action="http://xxxxxxx" method="POST">
账号:<input type="text" name="user" />
密码:<input type="text" name="pwd" />
   <input type="submit" />
</form>

  上述代码保存为html文件,在浏览器上打开效果如下图,在点击提交按钮时浏览器默认会在请求头加Content-Type: application/x-www-form-urlencoded。

  HTTP协议中没有规定post提交数据必须使用什么数据格式,服务端根据请求头中的Content-Type字段来获取提交方式然后对数据进行解析。在html中的form表单中enctype属性有3种设置方式:

 <form action="url地址" enctype="application/x-www-form-urlencoded" method="POST">
<form action="url地址" enctype="multipart/form-data" method="POST"> 上传文件的设置
<form action="url地址" enctype="text/plain" method="POST">

  post请求虽然是提交数据到服务器,但是服务器通常也会返回1个页面!其返回的内容一般告诉你提交数据的结果或者提交了哪些数据。比如在某平台post数据后给的返回示例:

  参照官方文档案例,本文使用requests来post表单数据(分为字典形式与元组形式传参)。

  PS:具体到不同的网站不同的接口,post的内容也是各不相同,网站注册可能就post账号和密码即可,点击购物可能要post价格、下单日期、数量、颜色、型号等,无论参数多少,其post的本质是不变的。需要post哪些参数要视网站而定!(现实中经常需要抓包才能看到post了哪些参数)

  1、以字典形式提交post数据

  requests提交Form表单,一般存在于网站的登录,用来提交用户名和密码。以 http://httpbin.org/post 为例,在requests中,以form表单形式发 送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。

  示例代码如下:

# -*- coding: utf-8 -*-
my_header = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44',
'Content-Type':'application/x-www-form-urlencoded'
}

def post_html(url,key_value,retry=2):
	try:
		r = requests.post(url=url,headers=my_header, data = key_value,timeout=10)
	except requests.exceptions.RequestException as e:
		print('请求失败',e)
		time.sleep(10)
		if retry > 0:
			get_html(url, retry - 1)
	else:
		html = r.text
		return html

url = 'http://httpbin.org/post'
key_value = {'wd': 'www.python66.com'}
html = post_html(url,key_value)
print(html)
{
  "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 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44", 
    "X-Amzn-Trace-Id": "Root=1-6191f777-6b4ec1565cb4960c5de7be80"
  }, 
  "json": null, 
  "origin": "60.247.59.67", 
  "url": "http://httpbin.org/post"
}

  2、以元组形式提交post数据

  除了上述传入字典之外。也可以为data参数传入一个元组列表,在表单中多个元素使用同一 key 的时候,这种方式尤其有效。

# -*- coding: utf-8 -*-
my_header = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44',
'Content-Type':'application/x-www-form-urlencoded'
}
def post_html(url,key_value,retry=2):
	try:
		r = requests.post(url=url,headers=my_header, data = key_value,timeout=10)
	except requests.exceptions.RequestException as e:
		print('请求失败',e)
		time.sleep(10)
		if retry > 0:
			get_html(url, retry - 1)
	else:
		html = r.text
		return html

url = 'http://httpbin.org/post'
key_value = payload = (('key1', 'value1'), ('key1', 'value2'))
html = post_html(url,key_value)
print(html)
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "key1": [
      "value1", 
      "value2"
    ]
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "23", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44", 
    "X-Amzn-Trace-Id": "Root=1-6191f863-1441c7fa3c5f49a411189288"
  }, 
  "json": null, 
  "origin": "60.247.59.67", 
  "url": "http://httpbin.org/post"
}

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会