关于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 ...
随机推荐
- Linux复制命令cp进阶
cp -a:连同属性和权限也一起复制 cp -i:如果不带该参数,默认覆盖同名文件而不会提醒. cp -u:只拷贝符合以下条件的文件到目标目录:目标目录中不存在的文件或目标目录中文件版本较旧的文件. ...
- 【leetcode】609. Find Duplicate File in System
题目如下: Given a list of directory info including directory path, and all the files with contents in th ...
- auto_now_add与auto_now的区别
- 【Gitlab】git clone http连接,带用户名和密码
test项目在gitlab的http请求的url: http://gitlab.com/test.git 用以下方式请求不需要再输入用户名和密码 git clone http://username: ...
- 【Linux】运维常用命令
1.查看进程 ps -ef 如果需要查看特定的进程,比如redis的 ps -ef | grep redis 2.强制杀死进程 kill -9 进程id 3.忽略输出后台启动 nohup ./red ...
- paper 155:face/head pose estimation
参考来源:http://www.cnblogs.com/lanye/p/5312620.html 人脸姿态估计:pitch,yaw,roll三种角度,分别代表上下翻转,左右翻转,平面内旋转的角度. ...
- C#操作Access的查询、添加、删除、修改源程序
C#操作Access的查询.添加.删除.修改源程序 using System; using System.Collections.Generic; using System.ComponentMode ...
- window安装consul
安装consul 下载包: https://www.consul.io/ 解压 consul_1..2_windows_amd64.zip 复制 consul.exe 到 d:\soft\consul ...
- 在Windows系统使用Gpg4win进行加密解密
GPG,又称为GnuPG,全称是Gnu Private Guard,即GNU隐私卫士.GPG是以PGP算法为核心的强大的加密软件.但GPG项目是一套命令行程序,而且是为 Linux 等开源操作系统设计 ...
- 简单数学算法demo和窗口跳转,关闭,弹框
简单数学算法demo和窗口跳转,关闭,弹框demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...