/**
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的更多相关文章

  1. GitLab安装说明

    GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用. gitlab是基于Ruby on Rails的, ...

  2. TIDB-cenos7开发环境搭建

    1.安装centos7,注意要安装桌面,如果最小化安装,无法使用IDE了 关闭防火墙或者打开4000端口 systemctl stop firewalld.service #停止firewall sy ...

  3. 安装hyperledger fabric V1.0.1

      安装文档位置: https://github.com/hyperledger/fabric   fabric代码托管地址 https://hyperledger-fabric.readthedoc ...

  4. 安装hyperledger fabric V1.0.0-beta

      安装文档位置: https://github.com/hyperledger/fabric   fabric代码托管地址 https://hyperledger-fabric.readthedoc ...

  5. centos7搭建Fabric基础环境

    一.首先升级centos最新内核 参考https://www.cnblogs.com/sky-cheng/p/12146054.html 二.卸载旧版本docker [root@localhost ~ ...

  6. golang的GET请求(类似于PHP的CURL)

    check_url := "https://www.baidu.com" header := make(map[string]string) res, err := util.Hp ...

  7. 2016年最新mac下vscode配置golang开发环境支持debug

    网上目前还找不到完整的mac下golang环境配置支持,本人配置成功,现在整理分享出来. mac最好装下xcode,好像有依赖关系安装Homebrew打开终端窗口, 粘贴脚本执行/usr/bin/ru ...

  8. Mac下golang开发环境配置

    go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...

  9. [goa]golang微服务框架学习--安装使用

      当项目逐渐变大之后,服务增多,开发人员增加,单纯的使用go来写服务会遇到风格不统一,开发效率上的问题. 之前研究go的微服务架构go-kit最让人头疼的就是定义服务之后,还要写很多重复的框架代码, ...

随机推荐

  1. python之生成随机测验试卷

    自己又开始懒散的态度生活,所以几乎有两个月没有更博了. 项目:美国各州首府地理考试,为防止作弊,35份试卷,50道题随机次序,生成独一无二的试卷. 基本想法: 1.将各州首府的地方和首府写入列表,以K ...

  2. android 7.0拍照问题file:///storage/emulated/0/photo.jpeg exposed beyond app through ClipData.Item.getUri

    Android7.0调用相机时出现新的错误: android.os.FileUriExposedException: file:///storage/emulated/0/photo.jpeg exp ...

  3. OpenCV——输入输出XML和YAML文件

  4. Android Edittext聚焦时输入法挡住了EditText输入框的两种解决方案

    方案一.把整个布局文件用ScrollView套住.这样当你聚焦时虽然输入法也能够挡住一些输入框,但是你可以通过手动滑动看被挡住的内容. 方案二.在Activity中设置android:windowSo ...

  5. HDU 1203 I NEED A OFFER!(01背包+简单概率知识)

    I NEED A OFFER! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  6. 模板自定义函数 template function

    sqlite3中的日期默认是UTC,当日期字段的默认值是CURRENT_TIMESTAMP时,这个日期和北京时间CST少了8小时. 网上建议说数据库里用UTC,读取数据时再转换为当地时间. web页面 ...

  7. 一个评测指标就是MAP(Mean Average Precision)平均精度均值。

    一个评测指标就是MAP(Mean Average Precision)平均精度均值. 转载 2017年09月13日 10:07:12 标签: 深度学习 892 来源01:Mean Average Pr ...

  8. Python 语言简介

    Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等. 那P ...

  9. mfc CTabCtrl

    知识点: CTabCtrl常用属性 CTabCtrl类常用成员函数 CTabCtrl代码示例 一.CTabCtrl控件属性 Bottom:底部样式 Vertical:垂直样式 与Bottom结合使用, ...

  10. SSIS 事件的向上传递

    在SSIS中,Package是Task组件的有序组合,具有层次结构,Package处于层次结构的顶层(Root Level),对于父子包结构,父包(Parent Package)通过Execute P ...