Golang实现http接口调用及web数据抓取[get post模式]

rfyiamcool · · 9729 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前沿:

   继续扩展我的golang服务端,这边有些数据库是没有权限的,对方给了我webservices的接口,针对异常的数据,我要去抓数据,再次分析,golang貌似没有python那么多的模拟浏览器访问的模块,还好默认的http就支持。 功能一点都不必urllib2 差。。。


   正题!!! 这里是通过golang提供的net/http模块, http.NewRequest来进行数据抓取。 他能实现python下的urllib2的功能 !

原理不多说了,大家直接套用这两个get post的例子吧。

可以任意的加header头,比如怎么加一个浏览器的标识 !

下面是完整的例子,可以加更多的Header


我们再来测试下 post获取数据 !


我们用http加上golang的runtime可以搞成类似 ab的压力测试工具,我昨天写了一个版本,但是在压倒3k以上的链接数的时候,会出现不少的error,原因可能是linux本身没有做tcp的优化,获取是对端的tornado没有用@gen,所以效率跟不上去,我的压力程序没有做defer panic处理。 今天看了下 golang的 gb压力测试工具,发现主要的思路是相同的,但是很多的细节没有做处理,比如channel的同步是用那种for <-c 的土方法实现的。

我的程序是有问题,但是老外有大牛已经构建了一套类似ab的工具,性能差不多,但是这个支持更多的选项和参数,包括代理,基本认证,请求头header信息,长链接,post,gzip压缩,开启几个cpu核心,cookie的插入。


用golang实现的搞并发的压力测试工具 !

原文:xiaoruicc

 -A=”": Add Basic WWW Authentication, the attributes are a colon separated username and password.        

 -C=[]: Add cookie, eg. ‘Apache=1234. (repeatable)                                                      

 -G=4: Number of CPU                                                                                    

 -H=[]: Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’ Inserted after all normal header lines. (r

epeatable)                                                                                                

 -T=”text/plain”: Content-type header for POSTing, eg. ‘application/x-www-form-urlencoded’ Default is ‘te

xt/plain’                                                                                                

 -c=1: Number of multiple requests to make                                                              

 -h=false: Display usage information (this message)                                                      

 -i=false: Use HEAD instead of GET                                                                      

 -k=false: Use HTTP KeepAlive feature                                                                    

 -n=1: Number of requests to perform                                                                    

 -p=”": File containing data to POST. Remember also to set -T                                            

 -r=false: Don’t exit when errors                                                                        

 -t=0: Seconds to max. wait for responses                                                                

 -u=”": File containing data to PUT. Remember also to set -T                                            

 -v=0: How much troubleshooting info to print                                                            

 -z=false: Use HTTP Gzip feature                                                                        

wKiom1MybG7Q9OCWAAgXzjPTBo0978.jpg

具体的用法:

wKiom1MybJyxPy2CAAUE_hjCdcE841.jpg

咱们在看看nginx服务端的日志情况:

wKiom1MybvfyFxAyABD8hLgjayk480.jpg


有疑问加站长微信联系(非本文作者)

本文来自:峰云就她了

感谢作者:rfyiamcool

查看原文:Golang实现http接口调用及web数据抓取[get post模式]

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

9729 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传