/**
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. Dubbo -- 系统学习 笔记 -- 安装手册

    安装手册 示例提供者安装 示例消费者安装 Zookeeper注册中心安装 Redis注册中心安装 简易注册中心安装 简易监控中心安装 管理控制台安装 推荐使用Zookeeper注册中心 你可以只运行D ...

  2. VC++环境下单文档SDI与OpenGL多视图分割窗口的实现-类似3DMAX的主界面

    本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面.首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话 ...

  3. setattr

    setatt r给对象的属性赋值,若属性不存在,先创建再赋值 用法 setattr(object, name, values) object -- 对象. name -- 字符串,对象属性. valu ...

  4. python+jenkins 构建节点环境编译器配置问题

    python 编译器默认添加环境变量路径 

  5. Java安全通信:HTTPS与SSL

    转载地址:http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html Java安全通信:HTTPS与SSL 1. HTTPS概念 ...

  6. (转)postfix疯狂外发垃圾邮件之分析与解决

    从进程中看到,好像是postfix有问题.我这postfix主要是用来给程序发达邮件用的,如报警,程序外发邮件等.平时postfix进程不会像现在这样异常,这在postf主进程CPU占用高,其它的相关 ...

  7. js 获取当前页url网址信息

    转载地址:js如何准确获取当前页面url网址信息 摘录: 举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window ...

  8. 一条insert语句插入数据库

    CREATE TABLE test_main ( id INT NOT NULL, value VARCHAR(10), PRIMARY KEY(id) ); oracle插入方式:INSERT IN ...

  9. 20155222卢梓杰 实验九 Web安全基础

    实验九 Web安全基础 今天不多bb,打开webgoat就是干好吧 1.简单字符串sql注入 可以看到这个实验说明是 "下表允许用户查看其信用卡号码.尝试插入一个SQL字符串,以显示所有信用 ...

  10. 20155306 白皎 0day漏洞——漏洞利用原理之DEP

    20155306 白皎 0day漏洞--漏洞利用原理之DEP 一.DEP机制的保护原理 1.为什么出现DEP? 溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计 ...