刘荣星的博客

  • 留言
  • About
一个关注Linux/BSD运维等相关知识的博客
  1. 首页
  2. Python
  3. 正文

python requests post date日期类型后端无法接收问题

2016-03-08 16138点热度 1人点赞 0条评论

说话一个GM后台开服信息需要手动在GM后台提交,这个手动做了3个月,终于忍不了重复劳动,手动输入造成漏填及填错的问题。亮出 Python 中的 requests 模块,听说用这个写爬虫不错,palapala

很快脚本可以从文件读取相关配置信息,并能登陆后台获取 session,并提交上数据。但问题出现了,其中有个开服日期(2016-03-08 14:00:00 这种 "yyyy-MM-dd HH:mm:ss"格式)没有保存到数据库中,期间使用各种工具抓包对比浏览器手动提交的post参数均没发现问题,用 Postman 插件提交相同的参数是正常的。询问过php开发、java开发、安卓开发,都觉得拼接的 post 参数没问题。那问题在哪呢?查看后台服务日志,发现有报错,但是日志不完整,只提交有错误,无法得知更多细节问题。

询问后台开发人员,得知后台框架是使用 java 中的 struts2,放 Google 一搜索 “struts2 date 问题”,好家伙果然有很多人进了这个坑。 比如这位贴吧网友 http://tieba.baidu.com/p/2782007443。通过这个网友的日志 http://zengyi.me/blog/2015/02/07/struts-string-to-date-bug/ 得知如下

问题原因在于,Struts2 会对七种时间格式进行自动转换,其中还硬编码了”yyyy-MM-dd’T’HH:mm:ss” 这么一种格式,这是美国语言中使用的日期格式。我的请求参数中,有个日期参数是 yyyy-MM-dd 格式的,而对于yyyy-MM-dd这种日期类型,在英语语言中是没法匹配的,由于Struts2匹配日期时,使用了Locale,因此,如果客户端默认的语言环境是英语,则 Struts 无法匹配需转换的日期格式,自动转换就失败了。用户的机器和我的模拟器的语言环境都是英语,于是日期参数没有转换成功,请求就失败了。

然后我做了个试验,正能正常提交数据的 Firefox 浏览器语言改成只留下 en-us\ en两个,重新提交页面,哈哈哈,日期一样没提交上去,所以 python 脚本里只要加上 headers = {"Accept-Language": "zh-CN,zh;q=0.8"}就能正常提交日期了。看来还是后台没有完善对多语言环境的支持,不过我在这个排查过程也疏忽了一些问题,比如,只关注了post参数正不正确,而没有好好对比 header 请求头里的相关信息,槽兄在帮我排查这个问题的时候提出了要对比下请求头,但唯独漏了 Accept-Language。

排查中所使用到的工具:
1、Fiddler Web Debugger
2、Postman
3、Wireshark
4、Firebug
5、Chrome Developer Tools
及 PyCharm IDE工具 Debug代码

参考文章:

http://polaris.blog.51cto.com/1146394/315403/
http://zengyi.me/blog/2015/02/07/struts-string-to-date-bug/
http://www.jiancool.com/article/80023377219/
http://docs.python-requests.org/zh_CN/latest/user/advanced.html

标签: lang python
最后更新:2016-03-08

JavasBoy

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
CentOS7 python2 安装 elasticsearch 模块 在VMWare Workstation虚拟机里使用 yubikey Gentoo Gnome 登陆界面开启触摸板轻击 python3去除emoji表情符号 记录几个内网广播包 Linux Mint 20 gnome-terminal 使用等距更纱黑体 SC字体
Ubuntu12.04无法使用vim系统剪贴板解决方法 Nginx和PHP-FPM的启动/重启脚本 DSDT修改详解 20111230 记录几个内网广播包 参观中国电影博物馆
分类
  • After Effects / 20篇
  • Apple / 5篇
  • Archlinux / 4篇
  • Bash / 2篇
  • Cinema 4D / 1篇
  • Docker / 1篇
  • eMule / 2篇
  • FreeBSD / 9篇
  • Gentoo / 1篇
  • Go / 2篇
  • gpg / 1篇
  • Graphics / 15篇
  • Haproxy / 1篇
  • ingress / 1篇
  • IntelliJ_IDEA / 1篇
  • java / 2篇
  • kafka / 1篇
  • Linux / 24篇
  • MySQL / 3篇
  • network / 3篇
  • Network / 4篇
  • Nginx / 5篇
  • Perl / 4篇
  • Python / 9篇
  • Python 操作符 / 1篇
  • Python 正则 / 2篇
  • rose / 1篇
  • Script / 4篇
  • Tornado / 1篇
  • Vim / 5篇
  • 学习 / 24篇
  • 电脑 / 29篇
  • 那不勒斯 / 1篇
  • 随笔 / 45篇
标签聚合
FreeBSD Graphics python AE MAC Linux 双系统 After Effects

COPYRIGHT © 2025 刘荣星的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang