重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。
成都创新互联公司主营孝昌网站建设的网络公司,主营网站建设方案,app软件开发公司,孝昌h5小程序开发搭建,孝昌网站营销推广欢迎孝昌等地区企业咨询
同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。
本文主要是对我日常在使用golang时遇到的一些问题与解决方式进行的汇总,在此提供给大家便于排查一些遇到的问题,其中有更好的解决方案可在评论区留言。
我在使用postmain测试接口时后端报错,该错误原因是因为使用请求头使用的是form-data而后端接受使用的json,这时就会出现该问题
问题图
这里改成使用json格式提交即可解决该问题。
解决图
goget请求可以接受结构体。
接收者是结构体时,可以是结构体类型、结构体指针类型。调用时不区分调用者是结构体还是结构体指针,go语言会自动转化为对应的结构体或结构体指针。
golang net/http标准库的client是可以配置各种代理的,http/https/sock5等,不过fasthttp仅支持配置sock5代理,通过定义fasthttp dialfunc实现:
项目中碰到的问题是,ops只提供了用squid搭建的http代理,所以是想重新定义一个http代理的dialfunc,找了fasthttp github仓库的issue,作者提供了一个dialFunc
经测试,访问https的站点是OK的,访问http的站点不行,代理连接不上。先说一下http/https代理的区别,再说原因。
使用代理访问https网站时,会先发CONNECT请求,让代理与目标站点建立一个http tunnel,之后在这个tunnel基础上进行传输,对应到上面的dialFunc过程就是:
可以看到http站点是不需要发CONNECT请求的,而是直接将目标站点的url作为path 填写在http请求头中。
为何上面的dialfunc访问http站点不行呢,查了squid代理的文档,发现squid默认会禁止非https站点通过CONNECT方法建立通道,自己搭了个squid代理去掉配置项,发现上面的dialfunc是可以访问http、https站点的,就是说http,https都先建立通过,再请求。
看了fasthttp的源码,没办法在请求前修改request header中的path为目标站点url,所以如果需要通过fasthttp使用http代理,那么可以使用上面的dialfunc,同时代理需要允许非443端口的站点可以建立通道。如果做不到这一点,那么还是建议使用标准库net/http的client,会更方便一点。
上面是从源码复制得出。
Form属性包含了post表单和url后面跟的get参数。
PostForm属性只包含了post表单参数。
实践数据如下:
打印请求头:
打印Form和PostForm
客户端打印:
有时候需要处理很多请求,显然,一个一个去处理是要花费很多时间的
我们就需要用到并发的方式,python并发请求的方法很多,从简单到复杂。
接口参数狠简单,headers、body,带上cookie就好了
因为是查询一组数据,所有先把查询对象变量化(可以写到excel里去读,这里就不介绍了,提供这个思路)
构造头信息,直接复制
执行请求步骤,这一步是核心内容
git地址: