python教程

当前位置:首页 > requests爬虫 > 当前文章

requests爬虫

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

2021-11-11 117赞 老董笔记

  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)

文章评论

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