HTTP踩坑记录

本文记录了HTTP使用过程中的几个常见问题,包括代理设置、Cookie管理、Gzip压缩、JSON编码规范以及HTTP请求的调试与内容获取方法。在设置代理时要注意HTTPS与HTTP的区别;Cookie具有客户端唯一性,不能简单复制;Gzip使用不当可能导致服务器解析错误;Go语言中JSON编码要求首字母大写,可使用`json:"key"`指定字段映射;打印HTTP请求与响应内容可使用标准库函数,获取内容有多种方式。

HTTP踩坑记录

proxy

想当然地以为访问https网站,代理地址也需要配置为https://xx.xx,修改为http://后可以使用。具体代码如下:

	fixedURL, err:= url.Parse("http://username:password@devproxy.h3c.com:8080")
	transport:=&http.Transport{
		Proxy:http.ProxyURL(fixedURL),
	}
	client:=&http.Client{Transport:transport}

cookie

cookie是用来识别不同client,所以不同浏览器不同PC对应的cookie是不同的,从其他机器直接复制cookie过来有可能是不可用的。

gzip

http.request中的head是需要针对实际情况使用的,我在使用中多加了一个gzip导致服务器无法识别。。。。

json

golang在json编码时,只识别大写开头的变量,如果和json数据格式要求不一致,可通过json:"s"来标识;
且借助于标准库json的编解码,定义的结构体可以和json返回数据的结构体不完全一致,json会解析出共有的部分;
如下所示:

type respData struct{
	Code int `json:"code"`
	Data Data `json:"data"`
}
type Data struct{
	ApName string		`json:"apName"`
	FailReason string	`json:"failReason"`
	RunTime int			`json:"runTime"`
}

对应json返回数据格式:

{
"code": 0,
"message": "",
"data":{
"apSN": "219801A0WA9163Q09539",
"acSN": "210235A1JTB15C000019",
"acName": "WX5540H_1",
"apName": "2",
"apModel": "WTU420H",
"macAddr": "487a-daa0-78e0",
"apGroup": "default-group",
"radioNum": 2,
"softVersion": "E2418",
"status": 1,
"onlineTime": 410,
"runTime": 415,
"ipv4Addr": "5.0.0.55",
"failReason": " Kernel exception reboot\r\n"
}
}

打印reqresp的方式

借助于httputilDumpResponseDumpRequest函数可以方便的打印出reqresp的内容,如下:

temp := make([]byte, 1024)
temp, _ = httputil.DumpResponse(resp, true)
log.Println(string(temp))	

获取Body内容方式

除了直接调用Read方法,还可以借助于ioutil库的ReadAll方法,如下:

body2, _ := ioutil.ReadAll(resp.Body)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值