前沿:

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

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

原文:http://rfyiamcool.blog.51cto.com/1030776/1384473

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

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

1
2
3
4
5
client := &http.Client{]
req, err := http.NewRequest("POST""http://127.0.0.1", bytes.NewReader(postData))
req.Header.Add("User-Agent""无敌浏览器")
resp, err := client.Do(req)
defer resp.Body.Close()

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#http://xiaorui.cc
package main
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
import (
    "net/http"
    "io/ioutil"
    "fmt"
    "net/url"
)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
func main() {
    client := &http.Client{}
    reqest, _ := http.NewRequest("GET""http://127.0.0.1/", nil)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    reqest.Header.Set("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    reqest.Header.Set("Accept-Charset","GBK,utf-8;q=0.7,*;q=0.3")
    reqest.Header.Set("Accept-Encoding","gzip,deflate,sdch")
    reqest.Header.Set("Accept-Language","zh-CN,zh;q=0.8")
    reqest.Header.Set("Cache-Control","max-age=0")
    reqest.Header.Set("Connection","keep-alive")
    reqest.Header.Set("User-Agent","chrome 100")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    response,_ := client.Do(reqest)
    if response.StatusCode == 200 {
        body, _ := ioutil.ReadAll(response.Body)
        bodystr := string(body);
        fmt.Println(bodystr)
    }
//  reqest, _ = http.NewRequest("POST","http:/127.0.0.1/", bytes.NewBufferString(data.Encode()))
/    respet1,_ := http.NewRequest("POST","http://127.0.0.1/",url.Values{"key":"Value"})
//    reqest1.Header.Set("User-Agent","chrome 100")
//    client.Do(reqest1)
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#http://xiaorui.cc
package main
import(
         "fmt"
         "net/http"
         "net/url"
         "io/ioutil"
 )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
func main(){
        get()
        post()
}
 func get(){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
         response,_:=http.Get("http://127.0.0.1/")
         defer response.Body.Close()
         body,_:=ioutil.ReadAll(response.Body)
         fmt.Println(string(body))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
         if response.StatusCode == 200 {=
                 fmt.Println("ok")
         }else{
                 fmt.Println("error")
         }
 }
 func post(){
         //resp, err :=
         http.PostForm("http://127.0.0.1",
                 url.Values{"name": {"ruifengyun"}, "blog": {"xiaorui.cc"},
                 "aihao":{"python golang"},"content":{"nima,fuck "}})
 }

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

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

1
2
go get github.com/parkghost/gohttpbench
go build -o gb github.com/parkghost/gohttpbench

用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

具体的用法:

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

本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1384473,如需转载请自行联系原作者

Golang实现web api接口调用及web数据抓取[get post模式]相关推荐

  1. 不使用jQuery对Web API接口POST,PUT,DELETE数据

    前些天,Insus.NET有演示Web API接口的操作: <怎样操作WebAPI接口(显示数据)>http://www.cnblogs.com/insus/p/5670401.html ...

  2. 满足多语言环境的拼多多API接口调用销量/详情数据

    在PHP.JAVA和C#环境下,API接口调用都可以使用对应语言的网络通信库实现.以下是各个语言常用的网络通信库: 1.PHP:curl库是PHP中使用最广泛的网络通信库之一,它支持HTTP/HTTP ...

  3. GitHub 4K+Star!SpaceX火箭数据开放API接口,可用Python进行抓取分析

    (推荐搜索) 梅宁航 发自 凹非寺 量子位 报道 | 公众号 QbitAI 马斯克用火箭把人送上天,SpaceX粉丝把火箭有关信息贴到GitHub. 4k+ Star,GitHub热榜,SpaceX粉 ...

  4. 鸿蒙开发访问webapi,Web API接口

    #e# 3.集合和分页的处理 在很多接口里面,我们都需要用到分页的处理,Web API也不例外,这样可以提交数据检索效率,减少服务器数据处理的压力,同时也提交客户端的数据显示速度. 一般的集合接口定义 ...

  5. 天行数据土味情话API接口调用接口

    天行数据土味情话API接口调用 注册天行数据账号 申请"土味情话"接口 下载微信开发工具 创建一个空项目 将下面的key填到是链接上即可请求成功 https://apis.tian ...

  6. 调用JShaman的Web API接口,实现JS代码加密。

    在NodeJS中,调用JShaman的Web API接口,实现JS代码加密. 同样的方法,也可把该功能集成到自己的产品或项目中,让自己也具备JS加密功能. 调用JShaman接口的源码非常简单: /* ...

  7. ASP.NET Web API 接口执行时间监控

    软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥.如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一. 在本文中,我将解释 ...

  8. Web API接口开发和测试

    4.ASP.NET Web API的开发 上面我们定义了一般的Web API接口,以及实现相应的业务实现,如果我们需要创建Web API层,还需要构建一个Web API项目的. 创建好相应的项目后,可 ...

  9. rap2检测哪些接口在使用_使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

    最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微 ...

最新文章

  1. Java 洛谷 P1219 八皇后
  2. 设计模式在Netty 中的应用-策略模式源码举例
  3. shell之a+b求和l脚本的三种写法
  4. 2017年计算机三级网络技术试题,2017年计算机三级网络技术考前试题及答案(8)
  5. nodejs mysql mvc_一种nodejs的MVC框架
  6. 用PD进行数据库建模经验总结
  7. ext教程_exe_作者blackant
  8. 台式安装nas系统_个人云盘搭建延伸二:我也可以搭建NAS!黑群辉系统安装配置及测试...
  9. Java核心编程实践--视频
  10. 2019年上半年软件设计师上午真题及答案解析
  11. Chrome浏览器上集成IE内核方案
  12. 「津津乐道播客」#397 厂长来了:怎样用科技给法律赋能?
  13. python整数和浮点数
  14. 红楼梦第一回ruby优化
  15. 李开复的做最好的自己
  16. RTSP 流媒体协议
  17. 三菱PLC4轴控制伺服完整案例,三菱PLC FX3U加三菱1PG定位模块控制4个松下伺服,有完整的注释,结构清晰明了
  18. 知识点:PCB板布线流程
  19. 3DSMAX模型烘焙流程
  20. Linux补充知识:

热门文章

  1. 监控url_熬夜之作:一文带你了解Cat分布式监控
  2. 大数据 -- kafka学习笔记:知识点整理(部分转载)
  3. Django视图简介
  4. jmeter HTTPS和HTTP的区别
  5. UILabel的行间距,字间距处理
  6. 动态规划(斜率优化):BZOJ 3675 [Apio2014]序列分割
  7. c# 读取写入excel单元格基本操作
  8. Wing IDE 4.1破解教程
  9. C语言编写工资管理系统类似学生管理系统
  10. matlab 判断一个数组中有没有重复的元素