怎么调试网络请求

 

作者QQ:415074476

QQ群:191280586

常规方式 不过是使用NSLog打印出链接 和 返回内容.

这样有两个弊端。 一是只看到了数据,没有看到中间环节, 并且数据可能是来自于缓存, 而不是真的来自于服务器。

二是每次都要加断点,运行程序。有点麻烦。结果还不好保存下来。

 

其实我们可以借助其它工具来观察更多我们想要的信息.

甚至在写实际代码之前就可以模式网络请求。

 

这个先介绍模拟网络请求。

简单的GET请求, 我们可以简单地使用 wget 就可以。

不建议使用浏览器.因为一是,可能会有跳转, 二是有js执行会改变页面代码.

 

不过对于我们目前的应用来说倒是没有这个问题..因为是xml格式的数据,

相反, 使用浏览器, 还可以检查xml语法问题.

 

涉及到 POST请求, 我们就得用专门的命令行工具。curl了。

当然, 你不闲累的话, 也可以自己用telnet.

最简单的命令 curl http://mjweather.sinaapp.com/moji.html

在终端直接显示页面http://mjweather.sinaapp.com/moji.html的内容.

如果想看到更详细的数据加上-v参数.

curl –v http://mjweather.sinaapp.com/moji.html

 

看到没. 不光是内容体.连header信息也打印出来了.

Header信息是个相当有用的内容.

 

以上是使用 GET请求, 是相当容易的.

复杂点的Post请求.

 

看以下示例

curl -d ‘name=maynard&password=pwd’ ‘http://learn.com/login.php’

使用-d就可以带上表单数据了.

以上链接就是常用的模拟登陆了.当然后续应该是拿到cookie之后,

再发请求时把cookie带上. 有兴趣的同学可以自己去研究下. 当然最好是先研究下http协议.

 

再进一步的例子是上传图片了.

我之前测试上传图片的速度时, 就是使用的curl命令.

curl -F ‘pic=@test.jpeg’ ‘http://learn.com/upload.php’

以上命令是把当前目录的test.jpeg作为表单域中pic字段的内容上传到upload.php.

 

其它的还是http版本.

curl -0 ‘http://learn.com/index.html’//指定为1.0

 

curl -1 ‘http://learn.com/index.html’//指定为1.1

 

更多的功能请man curl自己研究.

下面说监控网络这块.

第一个要就介绍的工具是用来抓请求的。

tcpdump,

这个命令只有root用户才可以使用。

 

先用whereis tcpdump找出命令路径

 

 

 

 

失败了。。因为mac上不支持any这个常量。

 

好吧。说明一下。-i是指定端口的意思。

我们先看看哪个端口可用.

在我的机器active的是en1

 

so命令改下。sudo /usr/sbin/tcpdump -Xnlps0 -ien1 host mjweather.sinaapp.com

开始监听了..

试试吧..不管是用curl, wget, telnet还是浏览器.

打开http://mjweather.sinaapp.com/moji.html吧.

我这里用的是curl

curl http://mjweather.sinaapp.com/moji.html

command+t  新建一个终端tab.

输入curl weibo.com 再control+command+[ 回到前一个tab看看结果吧.

 

 

 

呃,内容太多了,好晕.

 

还好, 有软件帮我们做了tcpdump做的事. 使用 起来更方便. wireshark, 相当出名的一个工具。

 

 

上文已说过,我的机器使用的端口是en1.

这里使用wireshark监听网络数据看看.

数据一直刷, 真是烦死人..

那么过滤一下吧.

选中Capture Filters

在接下来的界面中选中 http tcp port (80)

 

 

 

依然很多啊..还是用host来过滤吧.

 

这下干净了.无关的数据都没有了..

但是怎么看数据呢?

 

选中HTTP/1.1 200 ok这条.右键选中Follow TCP Stream.

 

 

 

 

 

 

 

 

 

 

 

然后, 你就得到了看得懂的数据了.

 

 

工具都是死东西.

原理不过是所有数据都是通过网关通信.

然后把对应的数据按协议解析.

So, 认清协议才是玩网络通信的关键. .