开发过程中快速抓包并解析
这几天小编在工作中遇到了一个灵异事件,客户端使用的是安卓原生系统,服务端使用的是java。需求就是客户端在照相的时候可以实时上传照片。后台接收并保存,并且可以在平台上显示。看似简单的功能,确有个很大的坑。有2个平台,192.168.31.87平台是测试环境,192.168.31.239是演示环境,测试环境,演示环境,还有安卓客户端代码都是一样的,连mq,redis,nginx,数据库都是一样的。但是安卓端上传测试环境一直报java.net.SocketException,在演示环境上是正常的。检查服务端代码。我首先用了postman进行测试.
由于已经上传过一张一样的照片,所以这里返回failed,但是请求是200.说明是调用正常。然后我在微服务上写了个测试类,用httpclient调用结果也是正常。
在安卓客户端上传的时候,正常和不正常的log分别是
正常: response-->Response{protocol=http/1.1, code=200, message=OK, url=http://192.168.31.239:8081/api/collDataUpload?para={%22fileName%22:%2220180822_185110_523.jpg%22,%22pno%22:%2220180821%22,%22dkey%22:%2215948c07-c718-4f32-a0af-4b7841fa95a0%22,%22stime%22:%221534935070523%22,%22etime%22:%221534935071000%22}} 不正常: response-->Response{protocol=http/1.1, code=400, message=, url=http://192.168.31.87:8081/api/collDataUpload?para={%22fileName%22:%2220180822_184559_902.jpg%22,%22pno%22:%228230%22,%22dkey%22:%22d351aa68-bace-438f-8d08-89ff598d4e04%22,%22stime%22:%221534934759902%22,%22etime%22:%221534934760000%22}}
安卓客户端部分代码
/** * 同步基于post的图片上传 * * @param url * @param file * @return */ public Response uploadPic(String url, File file, String fileName) throws IOException { MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); Log.i("huang", "files[0].getName()==" + files[0].getName()); //第一个参数要与Servlet中的一致 builder.addFormDataPart("file", fileName, RequestBody.create(MediaType.parse(guessMimeType(fileName)), file)); MultipartBody multipartBody = builder.build(); Request request = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody, listener)).build(); okHttpClient.newCall(request).enqueue(callback); }
服务端
然后客户端调用服务端连这个接口都没进来,首先我判断配置文件是否有对文件大小进行过滤,然后看了filter也没什么。百思不得奇解。于是做了很多操作。虽然最后问题还是没=解决,但是到get到了很多新技能。
非常重要的一个技能:抓包。
···
大致步骤为:
1.首先在linux服务器上执行指令
2.调用接口,然后执行指令把linux文件下载到本地
3.使用Wireshark查看日志
需要使用的linux命令
netstat -tupln | grep 5088
tcpdump -i any -p -s 0 -w /tmp/cap.pcap
sz /tmp/cap.pcap
···
然后到开始菜单换中打开
Wireshark这软件,小伙伴百度下载即可
地址栏中可以输入过滤条件:
ip.addr == 192.168.31.182 and http
选中其中你想看的包,右键追溯流--->TCP流或者http流
这里大致解释一下:
Content-Type:是上传文件格式multipart/form-data是指图片。
boundary=XXXX,这是前端传的时候使用的一种形式addBoundary
Content-Length是内容大小
Host:是服务器主机地址
Connection是链接状态
Accept-Encoding是接收的编码格式
User-Agent:是用户上传的形式,这里安卓使用的是okhttp/3.6.0
content-Desposition是上下文的描述
content-Type:内容类型
很开心,又get到了一个新技能,但是我的问题还是没有解决。目前的解决办法就是自己在写个安卓端,单独用做个按钮,然后用okhttp上传文件到平台。
另外在操作安卓的时候遇到了adb.exe已停止工作,然后开启不了虚拟机的问题。
出错画面:
一般出现这个错误的原因都是由于adb的默认端都5037,被其他程序占用了。撸主我就碰到过被酷我音乐,鲁大师和被360mobile的exe程式占用了,后来这些程式全部被我删了!
首先我们应该在电脑中查看5037的端口情况,输入 netstat -aon|findstr "5037":
我们可以看到PID为4476的程式使用了关端口,然我我们打开任务管理器。
我们可以看到进程为“360MobileLoader.exe *32”的进程占用了5037端口。理论上来说我们结束这个进程应该就行了。但是问题来了!
居然不让我删除!!!!!!!!PS:我自己的电脑,删不删除还需要你的同意?
选择打“”开文件位置“”,找到对应的exe程式,我这儿使用的是360强制删除,PS:普通删除的方同样不允许我删除。
我删除了之后,电脑重新注销了一下,adb.exe正常启动起来了。
Genymotion又开启了。小姐姐又回来了哈哈。
在附送一个知识:无界鼠标.就是一个鼠标键盘控制N台电脑(可以是不同操作系统)
附上链接
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
项目研发流程及管理之我见
随着工作年限的增长,我们从一开始负责一个功能,再到负责一个模块的数据字典及框架设计。再到负责整个系统的需求评审及架构设计。这一路见证着程序猿的成长。但当我们逐步成为一名架构师,或是一名项目管理人员时,会发现一个项目的成功,会牵扯到各式各样的问题及风险。无论是系统本身要兼容快速发展的业务形态,还是由于人员因素导致的项目延迟,又或是系统代码的臃肿或是难以维护,亦是新人来后的一脸迷茫。那么下面,分享下,项目流程管理之我见。 一、整体项目流程 1、 需求评审与确认 要求:PD会进行需求的整理并放入需求资源池。确定本期研发的功能需求,并开始需求评审,需求评审时,能够使技术人员能够完全理解本次需求的前因后果,作用,目标及整个流程。 产出:该阶段主要为pd产出相关prd及demo,对需求进行宣讲,并记录疑问及难点。 2、模块流程文档 要求:围绕着本次迭代的核心问题,编写整个模块的闭环业务流程。如有复杂逻辑,需要画出用例图、协作图等。 同时,要给出该模块的非功能性需求,例如:调用量、日均增量、访问次数等待。 产出:领域模型、开发模块架构图、技术架构图、人员分工(每个人负责哪个模...
- 下一篇
koa源码阅读[3]-koa-send与它的衍生(static)
koa源码阅读的第四篇,涉及到向接口请求方提供文件数据。 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose第三篇:koa源码阅读-2-koa-router 处理静态文件是一个繁琐的事情,因为静态文件都是来自于服务器上,肯定不能放开所有权限让接口来读取。各种路径的校验,权限的匹配,都是需要考虑到的地方。而koa-send和koa-static就是帮助我们处理这些繁琐事情的中间件。koa-send是koa-static的基础,可以在NPM的界面上看到,static的dependencies中包含了koa-send。 koa-send主要是用于更方便的处理静态文件,与koa-router之类的中间件不同的是,它并不是直接作为一个函数注入到app.use中的。而是在某些中间件中进行调用,传入当前请求的Context及文件对应的位置,然后实现功能。 koa-send的GitHub地址 原生的文件读取、传输方式 在Node中,如果使用原生的fs模块进行文件数据传输,大致是这样的操作: const fs = require('fs') const Koa = re...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长