golang curl
/**
1.可设置代理
2.可设置 cookie
3.自动保存并应用响应的 cookie
4.自动为重新向的请求添加 cookie
*/
package curl import (
"net/http"
"net/url"
"io/ioutil"
"strings"
) type Browser struct {
cookies []*http.Cookie;
client *http.Client;
} //初始化
func NewBrowser() *Browser {
hc := &Browser{};
hc.client = &http.Client{};
//为所有重定向的请求增加cookie
hc.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
if len(via) > 0 {
for _,v := range hc.GetCookie() {
req.AddCookie(v);
}
}
return nil
}
return hc;
} //设置代理地址
func (self *Browser) SetProxyUrl(proxyUrl string) {
proxy := func(_ *http.Request) (*url.URL, error) {
return url.Parse(proxyUrl);
};
transport := &http.Transport{Proxy:proxy};
self.client.Transport = transport;
} //设置请求cookie
func (self *Browser) AddCookie(cookies []*http.Cookie) {
self.cookies = append(self.cookies, cookies...);
} //获取当前所有的cookie
func (self *Browser) GetCookie() ([]*http.Cookie) {
return self.cookies;
} //发送Get请求
func (self *Browser) Get(requestUrl string) ([]byte, int) {
request,_ := http.NewRequest("GET", requestUrl, nil);
self.setRequestCookie(request);
response,_ := self.client.Do(request);
defer response.Body.Close(); data, _ := ioutil.ReadAll(response.Body)
return data, response.StatusCode;
} //发送Post请求
func (self *Browser) Post(requestUrl string, params map[string]string) ([]byte) {
postData := self.encodeParams(params);
request,_ := http.NewRequest("POST", requestUrl, strings.NewReader(postData));
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
self.setRequestCookie(request); response,_ := self.client.Do(request);
defer response.Body.Close(); //保存响应的 cookie
respCks := response.Cookies();
self.cookies = append(self.cookies, respCks...); data, _ := ioutil.ReadAll(response.Body)
return data;
} //为请求设置 cookie
func (self *Browser) setRequestCookie(request *http.Request) {
for _,v := range self.cookies{
request.AddCookie(v)
}
} //参数 encode
func (self *Browser) encodeParams(params map[string]string) string {
paramsData := url.Values{};
for k,v := range params {
paramsData.Set(k,v);
}
return paramsData.Encode();
}
golang curl的更多相关文章
- GitLab安装说明
GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用. gitlab是基于Ruby on Rails的, ...
- TIDB-cenos7开发环境搭建
1.安装centos7,注意要安装桌面,如果最小化安装,无法使用IDE了 关闭防火墙或者打开4000端口 systemctl stop firewalld.service #停止firewall sy ...
- 安装hyperledger fabric V1.0.1
安装文档位置: https://github.com/hyperledger/fabric fabric代码托管地址 https://hyperledger-fabric.readthedoc ...
- 安装hyperledger fabric V1.0.0-beta
安装文档位置: https://github.com/hyperledger/fabric fabric代码托管地址 https://hyperledger-fabric.readthedoc ...
- centos7搭建Fabric基础环境
一.首先升级centos最新内核 参考https://www.cnblogs.com/sky-cheng/p/12146054.html 二.卸载旧版本docker [root@localhost ~ ...
- golang的GET请求(类似于PHP的CURL)
check_url := "https://www.baidu.com" header := make(map[string]string) res, err := util.Hp ...
- 2016年最新mac下vscode配置golang开发环境支持debug
网上目前还找不到完整的mac下golang环境配置支持,本人配置成功,现在整理分享出来. mac最好装下xcode,好像有依赖关系安装Homebrew打开终端窗口, 粘贴脚本执行/usr/bin/ru ...
- Mac下golang开发环境配置
go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...
- [goa]golang微服务框架学习--安装使用
当项目逐渐变大之后,服务增多,开发人员增加,单纯的使用go来写服务会遇到风格不统一,开发效率上的问题. 之前研究go的微服务架构go-kit最让人头疼的就是定义服务之后,还要写很多重复的框架代码, ...
随机推荐
- day2-课堂代码
# 字符串常用属性和操作 # a = 'aa' # b = 'bb' # c = 'cc' # d = a + b + c # print(d) # age = 50 # print('田老师的年龄是 ...
- Kafka设计解析(十九)Kafka consumer group位移重设
转载自 huxihx,原文链接 Kafka consumer group位移重设 本文阐述如何使用Kafka自带的kafka-consumer-groups.sh脚本随意设置消费者组(consumer ...
- HDU2552 三足鼎立 【数学推理】
三足鼎立 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 使用target打开的iframe 获取src的问题
<a target="mainframe"href="xxx.jsp"/> <iframe id="mainframe" ...
- js中常见继承方式
1.原型模式 function Father(){ this.property = true; } Father.prototype.getValue = function(){ return thi ...
- mssql2012的分页查询
sql2102支持的分页查询 注意:以下都是先执行排序,再取行数据 select* from t_workers order by worker_id desc offset 3 rows --先 ...
- 20155207 EXP7 网络欺诈技术防范
20155207 EXP7 网络欺诈技术防范 实验内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 具体有 (1)简单应用SET工具建立冒名网站 (2)etterca ...
- python 字符串的split()函数详解
split翻译为分裂. split()就是将一个字符串分裂成多个字符串组成的列表. split()当不带参数时以空格进行分割,当代参数时,以该参数进行分割. //---当不带参数时 example: ...
- CS100.1x Introduction to Big Data with Apache Spark
CS100.1x简介 这门课主要讲数据科学,也就是data science以及怎么用Apache Spark去分析大数据. Course Software Setup 这门课主要介绍如何编写和调试Py ...
- Macaca 基础原理浅析
导语 前面几篇文章介绍了在Macaca实践中的一些实用技巧与解决方案,今天简单分析一下Macaca的基础原理.这篇文章将以前面所分享的UI自动化Macaca-Java版实践心得中的demo为基础,进行 ...