您的位置: 网站首页> requests爬虫> 当前文章

requests之post字符串、json数据及含中文字符处理

老董-我爱我家房产SEO2021-11-11199围观,108赞

  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发送的数据并非编码为表单形式的,而是传递一个string而不是1个字典,其中json字符串最为常见。提交json串可以有2种方式实现

  1)data参数传递json字符串

  2)json参数直接传递字典,它会被自动编码,在请求头中也不用显式声明 这是 2.4.2 版的新加功能。

# -*- coding: utf-8 -*-
import json

url = 'https://api.github.com/some/endpoint'
key_value = {'some': 'data'}
r = requests.post(url, data=json.dumps(key_value),headers={'Content-Type':'application/json'})
# 或者
r = requests.post(url, json=key_value)

 

  有时候想要post发送的数据是一个普通的string。比如百度站长平台主动推送url的示例就是如此,要post的数据就是1个个的url字符串:

  json串本质也是一个字符串,在requests推送普通字符串的方法和上述推送json串的方式并无差别。

# -*- coding: utf-8 -*-

url = 'http://data.zz.baidu.com/urls?site=https://xxx&token=xxx'
string = 'http://www.python66.com'
r = requests.post(url, data=string)

  post数据存在中文的坑

  如果推送的字符串里含有中文,有时候post提交的时候会报错,此时可以把字符串encode为字节数据再进行推送。

url = 'http://data.zz.baidu.com/urls?site=https://xxx&token=xxx'
string = 'http://www.123.com/老董笔记/'
byte_string = string.encode('utf-8')
r = requests.post(url, data=byte_string)

很赞哦!

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

文章评论

    requests之post字符串、json数据及含中文字符处理文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200