关于Python的post请求报504错误
这是个奇葩的问题,我也是奇葩的研究了好几天,最后发现,哈,原来是这个原因,在此记录下曲折的心路历程
接口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错误的更多相关文章
- SpringMVC的AJAX请求报406错误
SpringMVC的AJAX请求报406错误原因有两种:1.jackson包没有引入 2.如果已经引入jackson包了还报406的错误,那么就有可能是请求的url路径是.html结尾,但是返回的数据 ...
- TP5 ajax请求报500错误
场景:几个站点从阿里云迁移到腾讯云,然后 TP5项目 ajax请求报500错误 数据返回成功,但是http状态码是500,不走success,一直走error 如下图: 原因分析: 服务器centos ...
- springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误。
springMVC配置时,静态资源和jsp文件路径没错但是访问时controller的请求报404错误. 1.场景 如果在web.xml中servlet-mapping的url-pattern设置的是 ...
- Yii 1.1 请求报400错误
Yii的action可以带参数,比如: class PostController extends CController { public function actionCreate($categor ...
- ajax请求报语法错误
今天改代码修正完一个ajax请求后,调试发现出错进error方法,查看错误信息报语法错误,具体是调用parseJSON方法时出错,因为我是用json方式传递的参数,所以第一时间查看data参数是否正确 ...
- 【证书】curl 和 java 请求报证书错误
1. 说明: 以下:例子的域名因为工作环境的问题,被我拿自己的博客域名替代了,所以无法进行模拟测试,请珍重,哈哈! 2. 环境: centos:7.5 java jdk:1.8.0_74 3. cur ...
- 解决微信小程序用 SpringMVC 处理http post时请求报415错误
解决微信小程序用 SpringMVC 处理http post时请求返回415错误 写微信小程序时遇到的问题,这个坑硬是让我整了半天 wx.request请求跟ajax类似处理方法一致 小程序端请求代码 ...
- http请求报400错误的原因分析
在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型 ...
- 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 ...
随机推荐
- wait与sleep区别?
wait与sleep区别? 对于sleep()方法,该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线 ...
- C#高级编程(32章)ADO.net
32.2高效地使用连接 sqlConnection类是针对sql的,而OleDbConnection 是针对其他比如access的,另外还有odbcConnection是针对odbc的,sql的访问优 ...
- SpringBoot---提供的自动配置
1.自动配置的ViewResolver 1.1.ContentNegotiatingViewResolver 1.2.BeanNameViewResolver 1.3.InternalResource ...
- hihocoder 1014: Trie树(Trie树模板题)
题目链接 #include<bits/stdc++.h> using namespace std; ; struct T { int num; T* next[]; T() { num=; ...
- 第二周作业—N42-虚怀若谷
一.描述Linux发行版的系统目录名称命名规则以及用途 1.文件名命名规则 (1).文件名最长255字节 (2).包括路径在内的文件名称最长4095个字节 (3).除了斜扛和NUL,所有字符都有效.但 ...
- django+nginx+uwsgi_cent0s7.4 部署
django+nginx+uwsgi_cent0s7.4 部署 几条命令 # 查看是否有 uwsgi 相关的进程 ps -aux|grep "uwsgi" # 杀死有关 uwsgi ...
- AcWing 244. 谜一样的牛 (树状数组+二分)打卡
题目:https://www.acwing.com/problem/content/245/ 题意:有n只牛,现在他们按一种顺序排好,现在知道每只牛前面有几只牛比自己低,牛的身高是1-n,现在求每只牛 ...
- 在CentOS上部署kubernetes1.9.0集群
原文链接: https://jimmysong.io/kubernetes-handbook/cloud-native/play-with-kubernetes.html (在CentOS上部署kub ...
- 广播接收者实现IP拨号
广播接收者实现IP拨号 效果图: 实现的功能就是自动监听我们要拨打的号码,在我们拨打的号码前加上179521 分析: 1.敲个类来继承广播接收者 并且将从打电话应用位置获取的号码加上179521,并将 ...
- Codeforces Round #506 (Div. 3) E
Codeforces Round #506 (Div. 3) E dfs+贪心 #include<bits/stdc++.h> using namespace std; typedef l ...