这是个奇葩的问题,我也是奇葩的研究了好几天,最后发现,哈,原来是这个原因,在此记录下曲折的心路历程

接口Content-Type没有,body用的是postman中的raw数据,格式是text

程序如下:

import requests
url = "https://XXXXXX.com/api/user_device" headers = {
'UserName': 'XXX1121@1.com',
'AccessToken': '08CXXXXXXXt051aS0o*evCgA'
,'AppVersion': 'XXX4.3.3',
'PhoneOS':'iPhone X',
'PhoneModel':'IOS 11.1',
'PhoneID':'phoneIdUniqueId',
'PhoneLanguage':'en'} data = {"LastConnectTime": 1623876540,
"mDeviceId": "123456a",
"FwVer": "YedUn1TJBu2yVbOkWaKQiQNmijxrM7S9",
"HwVer": "4FUNuI7BE4z5jJGWt598hZeYv0qKOqDy",
"DeviceType": "XX5"} r = requests.post(url, headers=headers, data=data)
print(type(data)) print(r.status_code)
#print(r.json())

1.开始是因为有一个报错,大概是SSLverify fail 的一个错,然后我就各种找原因,最后的解决方式是在requests.post里面加一个参数verify=False;这样报错就变成了一个警告,然后程序运行报504;这是麻烦的开始!

心路:我开始以为是SSL的那个警告引起的错误504,然后就各种查,后来发现好像不对,然后就研究是不是body格式引起的问题

2.然各种查body格式和Content-Type格式,真的是有收获,Content-Tpye有4种格式:application/x-www-form-urlencoded;multipart/form-data;application/json;text/xml;前三种格式需要在header里加上Content-Type类型,最后一种不需要;raw属于最后一种,且用的是text格式,所以我就在headers里加

'Content-Type':'text/xml'

结果:不再报504.接口跑通了,但是API报了个参数错误

    心路:协议里是没有Content-Type.可能不能乱加

注:试各种Content-Type的时候有的会报400

3.最后我把data处理了一下成功解决问题。data= json.dumps(data);然后在发送请求就可以了,Content-Type加不加都行(加上更好)。

总结:requests发送请求的data需要是str格式,而我写的是json格式,也就是Python里的dict,需要转换才能用,但是如果只看报错,根本不知道是什么原因

成功的程序:

import requests
import json url = "https://XXXXX.com/proapi/user_device" headers = {'Content-Type':'text/xml',
'UserName': 'XXX1121@1.com',
'AccessToken': '08j*XXXXXKdt051aS0o*evCgA'
,'AppVersion': 'XXX4.3.3',
'PhoneOS':'iPhone X',
'PhoneModel':'IOS 11.1',
'PhoneID':'phoneIdUniqueId',
'PhoneLanguage':'en'} data = {"LastConnectTime": 1623876540,
"mDeviceId": "123456a",
"FwVer": "YedUn1TJBu2yVbOkWaKQiQNmijxrM7S9",
"HwVer": "4FUNuI7BE4z5jJGWt598hZeYv0qKOqDy",
"DeviceType": "XX5"} data=json.dumps(data)
r = requests.post(url, headers=headers, data=data) print(r.status_code)
#print(r.json())

小插曲:如果https报错(只要不是200),print(response.json)会报错:

 raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

注:Python的request会把没有给Content-Type类型的数据默认成application/x-www-form-urlencoded,但是我不知道为啥我这里没有出问题;设定   在 urllib.request.AbstractHTTPHandler.do_request_()这个文件里;如果不想要默认的设定可以把那几句注释掉

重大发现:

原来postman有一个功能把接口请求直接转换成程序,以后写程序出问题时,可以借鉴参考一下

关于Python的post请求报504错误的更多相关文章

  1. SpringMVC的AJAX请求报406错误

    SpringMVC的AJAX请求报406错误原因有两种:1.jackson包没有引入 2.如果已经引入jackson包了还报406的错误,那么就有可能是请求的url路径是.html结尾,但是返回的数据 ...

  2. TP5 ajax请求报500错误

    场景:几个站点从阿里云迁移到腾讯云,然后 TP5项目 ajax请求报500错误 数据返回成功,但是http状态码是500,不走success,一直走error 如下图: 原因分析: 服务器centos ...

  3. springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误。

    springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误. 1.场景 如果在web.xml中servlet-mapping的url-pattern设置的是 ...

  4. Yii 1.1 请求报400错误

    Yii的action可以带参数,比如: class PostController extends CController { public function actionCreate($categor ...

  5. ajax请求报语法错误

    今天改代码修正完一个ajax请求后,调试发现出错进error方法,查看错误信息报语法错误,具体是调用parseJSON方法时出错,因为我是用json方式传递的参数,所以第一时间查看data参数是否正确 ...

  6. 【证书】curl 和 java 请求报证书错误

    1. 说明: 以下:例子的域名因为工作环境的问题,被我拿自己的博客域名替代了,所以无法进行模拟测试,请珍重,哈哈! 2. 环境: centos:7.5 java jdk:1.8.0_74 3. cur ...

  7. 解决微信小程序用 SpringMVC 处理http post时请求报415错误

    解决微信小程序用 SpringMVC 处理http post时请求返回415错误 写微信小程序时遇到的问题,这个坑硬是让我整了半天 wx.request请求跟ajax类似处理方法一致 小程序端请求代码 ...

  8. http请求报400错误的原因分析

     在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型 ...

  9. Python - requests发送请求报错:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 13-14: 小明 is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

    背景 在做接口自动化的时候,Excel作为数据驱动,里面存了中文,通过第三方库读取中文当请求参数传入 requests.post() 里面,就会报错 UnicodeEncodeError: 'lati ...

随机推荐

  1. struts2中的Action实现的三种方式

    Action类创建方式有哪些? 方式一:直接创建一个类,可以是POJO,即原生Java类,没有继承任何类,也没有实现任何接口 这种方式使得strust2框架的代码侵入性更低,但是这种方式是理想状态,开 ...

  2. 通俗理解BiLSTM-CRF命名实体识别模型中的CRF层

    虽然网上的文章对BiLSTM-CRF模型介绍的文章有很多,但是一般对CRF层的解读比较少. 于是决定,写一系列专门用来解读BiLSTM-CRF模型中的CRF层的文章. 我是用英文写的,发表在了gith ...

  3. oracle集合的应用

    union:求并集,公共部分只包含一个 ABC 和AB都没有显示出来 2:union all 相同的数据会包含两个 3:交集 intersect 既包含A又包含B 4:求差集  A集合中的数据B集合中 ...

  4. 最强DE战斗力

    最强DE战斗力 时间限制: 1 Sec  内存限制: 128 MB提交: 40  解决: 14[提交][状态] 题目描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈 ...

  5. 启动Nginx、查看nginx进程、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级

    1.启动nginx的方式: cd /usr/local/nginx ls

  6. [Repost] 常用素数

    作者:Miskcoo(http://blog.miskcoo.com/2014/07/fft-prime-table) 如果 \(r\cdot 2^k+1\) 是个素数, 那么在 \(\bmod r\ ...

  7. Workflow:Workflow 目录

    ylbtech-Workflow:Workflow 目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:ht ...

  8. 《JavaScript DOM 编程艺术》学习成果

    (在线演示地址)[http://thqy39.github.io/works/03.Js%20DOM%20website/index.html]

  9. 搜索的应用--计算最优解:Aizu - ALDS1_4_D Allocation

    搜索的应用-计算最优解 题目: You are given nn packages of wiwi kg from a belt conveyor in order (i=0,1,...n−1i=0, ...

  10. css怎么解决表格边框线重复问题

    <ul> <li><a href="#">1</a></li> <li><a href="# ...