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最让人头疼的就是定义服务之后,还要写很多重复的框架代码, ...
随机推荐
- Elasticsearch学习笔记1
Json (JavaScript Object Notation),即JavaScript对象标记法,当前十分流行和常见的互联网数据传输格式,尤其是在前端领域.Json是一种用于数据交换的文本格式,目 ...
- ssh访问服务器端visdom
在服务器端启动visdompython -m visdom.server在windows端,将服务器的8097端口重定向到windows端(做了映射绑定):ssh -L 8097:127.0.0.1: ...
- 三,ESP8266 SPI(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7520260.html 重点是说SPI通信协议,,,, 不要害怕协议因为协议是人规定的,,刚好我也是人......规定的协议 ...
- 微信小程序开发 [02] 页面注册和基本组件
1.页面注册 既然我们希望跳转到新的页面,那自然要新建页面相关的文件才行.在开篇已经讲过,一个小程序页面由四个文件组成,假如我们的页面名为welcome,那么这四个文件则是: welcome.js w ...
- 第11章 GPIO输出—使用固件库点亮LED
第11章 GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- Exp7
实验内容 简单应用SET工具建立冒名网站 kali IP: 192.168.1.160 (原198) win7 IP: 192.168.1.199 1.开启本机Apache服务 (1)查看80端口是否 ...
- OpenCV实战:人脸关键点检测(FaceMark)
Summary:利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection) Author: Amusi Date: 2018-03-20 ...
- sql语句——根据身份证号提取省份、出生日期、年龄、性别。
原表 sql语句: SELECT ) ' then '北京市' ' then '天津市' ' then '河北省' ' then '山西省' ' then '内蒙古自治区' ' then '辽宁省' ...
- 利用Github搭建自己的博客
教程链接:搭建个人博客 嘿嘿嘿!!一直想自己搭建博客的,一直没机会,这次终于把博客搭了起来.虽然只是一个壳子..套了别人的模板~不过还是很令人兴奋哟!总的来说,就按照这个教程一直往下走,其中有一个坑就 ...
- C++学习之从C到C++
头文件的包含 包含头文件可以不加.h结尾,如iostream,一些常用的头文件在引用时可以不加.h后缀,并在开头增加c,如: #include <cstdio> #include < ...