博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-requests之POST Data的json问题
阅读量:5100 次
发布时间:2019-06-13

本文共 1338 字,大约阅读时间需要 4 分钟。

代码如下:

import jsonimport requestsr = requests.post(url, data = {
"a": json.dumps({
"b": "c"})}); #url为随意URL

使用Fiddler抓包,虽然在WebForms里面看到格式如下:

但是在Raw中看到结果如下:

即自动执行了urlencode,查看requests/models.py源码发现,如果数据可迭代,即自动加入"application/x-www-form-urlencoded"头,并且执行urlencode:

PreparedRequest类的prepare_body方法中

if data:    body = self._encode_params(data)    if isinstance(data, basestring) or hasattr(data, 'read'):        content_type = None    else:        content_type = 'application/x-www-form-urlencoded'

RequestEncodingMixin类中_encode_params(data)方法中

if isinstance(data, (str, bytes)):    return dataelif hasattr(data, 'read'):    return dataelif hasattr(data, '__iter__'):    result = []    for k, vs in to_key_val_list(data):        if isinstance(vs, basestring) or not hasattr(vs, '__iter__'):            vs = [vs]        for v in vs:            if v is not None:                result.append(                    (k.encode('utf-8') if isinstance(k, str) else k,                     v.encode('utf-8') if isinstance(v, str) else v))    return urlencode(result, doseq=True)else:    return data

解决办法:

import jsonimport requestsheaders = {
"Content-Type": "application/x-www-form-urlencoded"} data = "a=%s" % json.dumps({
"b": "c"})r = requests.post(url, data = data, headers = headers);

 

转载于:https://www.cnblogs.com/JohnABC/p/5702998.html

你可能感兴趣的文章
欧几里德算法(模板)
查看>>
oracle 11g 压缩数据文件
查看>>
opencv2411配置
查看>>
【洛谷P1061 Jam的计数法】搜索
查看>>
Android studio 安装apk时报错:INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries...
查看>>
20. 多态
查看>>
pip国内源
查看>>
docker 从本地拷贝文件
查看>>
(转)VS2010中出现无法嵌入互操作类
查看>>
HTTP状态码
查看>>
转载一个关于javascript弹出窗口的详解
查看>>
THU的告诫
查看>>
让字体在div容器中垂直居中
查看>>
Android Weekly Notes Issue #221
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
C 算法
查看>>
使用fiddler进程弱网测试
查看>>
jdk path
查看>>
敏捷开发笔记 - 设计
查看>>