新聞中心
[golang] fasthttp 使用http代理
golang net/http標準庫的client是可以配置各種代理的,http/https/sock5等,不過fasthttp僅支持配置sock5代理,通過定義fasthttp dialfunc實現(xiàn):
成都創(chuàng)新互聯(lián)公司專注于雁塔網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供雁塔營銷型網站建設,雁塔網站制作、雁塔網頁設計、雁塔網站官網定制、微信平臺小程序開發(fā)服務,打造雁塔網絡公司原創(chuàng)品牌,更為您提供雁塔網站排名全網營銷落地服務。
項目中碰到的問題是,ops只提供了用squid搭建的http代理,所以是想重新定義一個http代理的dialfunc,找了fasthttp github倉庫的issue,作者提供了一個dialFunc
經測試,訪問https的站點是OK的,訪問http的站點不行,代理連接不上。先說一下http/https代理的區(qū)別,再說原因。
使用代理訪問https網站時,會先發(fā)CONNECT請求,讓代理與目標站點建立一個http tunnel,之后在這個tunnel基礎上進行傳輸,對應到上面的dialFunc過程就是:
可以看到http站點是不需要發(fā)CONNECT請求的,而是直接將目標站點的url作為path 填寫在http請求頭中。
為何上面的dialfunc訪問http站點不行呢,查了squid代理的文檔,發(fā)現(xiàn)squid默認會禁止非https站點通過CONNECT方法建立通道,自己搭了個squid代理去掉配置項,發(fā)現(xiàn)上面的dialfunc是可以訪問http、https站點的,就是說http,https都先建立通過,再請求。
看了fasthttp的源碼,沒辦法在請求前修改request header中的path為目標站點url,所以如果需要通過fasthttp使用http代理,那么可以使用上面的dialfunc,同時代理需要允許非443端口的站點可以建立通道。如果做不到這一點,那么還是建議使用標準庫net/http的client,會更方便一點。
golang 使用Socket5代理
socket代理又分為socket4和sockt5代理,其中socket4只能支持TCP協(xié)議,而socket5則同時支持TCP協(xié)議和UDP協(xié)議。
APNS推送Golang SDK使用Proxy代理
蘋果的消息推送是通過請求域名: 實現(xiàn)的,該域名解析結果為美國,這引發(fā)了兩個問題:
1、接口請求時間長,性能低,而且容易請求超時報錯
2、高峰期推送請求錯誤率升高
總體思路:增加一個美國代理服務器,通過代理服務器請求蘋果消息推送服務
1、原來流程
2、現(xiàn)在流程
3、具體方案實施選擇
選擇一:proxy服務器,部署一個正向代理服務,提供push消息的正向代理,消息通過代理服務器送達蘋果服務端
選擇二:proxy服務器,獨立實現(xiàn)、部署一個 標準的apns服務,負責 ios消息推送。將需要走美國節(jié)點的請求轉發(fā)到該proxy節(jié)點
具體情況、具體分析,應思考的點:
問題一、蘋果官方提供的SDK中,不支持設置代理服務器。官方SDK不適合更改,對以后系統(tǒng)更新不利
問題二、只有蘋果的push服務需要代理,其他例如華為、小米、vivo不應走海外代理
問題三、代理安全性
問題四、代理方案下,有重試邏輯。 如何準確定義和判斷失敗, 可能會引起消息重復推送
問題五、實現(xiàn)簡單、有效,正向代理方式:只需實現(xiàn)一個實例化對象方法,其他利用原始sdk即可。獨立apns服務方式:需要實現(xiàn)一個apns服務,國內、國外均需服務部署,需要增加獨立的開發(fā)和運營成本,另外還得改造調用服務,實現(xiàn)請求調度,優(yōu)點服務獨立、單一,具備一個單獨微服務條件
github.com/sideshow/apns2
方法一: 修改SDK文件
第一步:設置環(huán)境變量
第二步:修改apns2.NewClient方法
方法二: 從新定義一個NewClient方法
分享題目:go語言調用代理 go總代理
文章源于:http://fisionsoft.com.cn/article/higsps.html