go實現http代理
// golang代理 project main.go
package main
import (
"bytes"
"fmt"
"io"
"log"
"net"
"net/url"
"strings"
)
func main() {
log.SetFlags(log.Ltime | log.Lshortfile)
//監聽1314埠
s, err := net.Listen("tcp", ":1314")
if err != nil {
log.Panic(err)
}
//接受客戶端連線
for {
c, err := s.Accept()
if err != nil {
log.Panic(err)
}
go proxy(c)
}
}
func proxy(client net.Conn) {
defer client.Close()
var b [1024]byte
n, err := client.Read(b[:])
if err != nil {
log.Println(err)
return
}
var methon, host, addr string
fmt.Sscanf(string(b[:bytes.IndexByte(b[:], '\n')]), "%s%s", &methon, &host)
u, err := url.Parse(host)
if err != nil {
log.Println(err)
return
}
//http代理https流量
if u.Opaque == "443" {
addr = u.Scheme + ":" + u.Opaque
} else {
if u.Host != "" {
if strings.Index(u.Host, ":") == -1 {
addr = u.Host + ":80"
} else {
addr = u.Host
}
} else {
addr = u.Path
}
}
//連線遠端伺服器
s, err := net.Dial("tcp", addr)
if err != nil {
log.Println(err)
return
}
if methon == "CONNECT" {
fmt.Fprint(client, "HTTP/1.1 200 Connection established\r\nConnection: close\r\n\r\n")
} else {
s.Write(b[:n])
}
//進行轉發
go io.Copy(s, client)
io.Copy(client, s)
}
相關文章
- go proxy 實現反向代理Go
- HTTP 代理原理及實現(2)HTTP
- Nginx(五):http反向代理的實現NginxHTTP
- Golang如何實現HTTP代理伺服器GolangHTTP伺服器
- Go | Go 結合 Consul 實現動態反向代理Go
- go實現socks5代理Go
- GOLANG實現的HTTP轉HTTPS的代理GolangHTTP
- Go 實現常用設計模式(九)代理模式Go設計模式
- 設計模式學習-使用go實現代理模式設計模式Go
- go如何實現類似java的動態代理GoJava
- 什麼是HTTP代理501未實現錯誤?HTTP
- 修復HTTP代理501未實現錯誤方法HTTP
- 多執行緒Http代理伺服器 Java實現執行緒HTTP伺服器Java
- Go Web學習(1)——標準庫http實現serverGoWebHTTPServer
- GO httpGoHTTP
- python實戰--Http代理伺服器PythonHTTP伺服器
- Nginx實現代理Nginx
- HTTP代理,HTTPS代理還是SOCKS代理?HTTP
- 用無上下文的Go語言實現HTTP服務GoHTTP
- HTTP代理與SOCKS代理詳解HTTP
- 9、http隧道、https、SSL層、http代理、線上代理、socks代理區別HTTP
- http 代理的作用HTTP
- HTTP快取&代理HTTP快取
- 使用 http-proxy 實現 SAP UI5 請求的代理重定向HTTPUI
- 從零手寫實現 nginx-33-http_proxy 代理驗證測試NginxHTTP
- GO實現Redis:GO實現Redis叢集(5)GoRedis
- 【Go】go get 自動代理Go
- Go 標準庫 http.FileServer 實現靜態檔案服務GoHTTPServer
- 有哪些比較實用的全球http代理HTTP
- privoxy將socks代理轉為http代理HTTP
- Privoxy將Socks代理轉化HTTP代理HTTP
- 如何修復http代理出現的503錯誤?HTTP
- go 實現btcGo
- http代理伺服器HTTP伺服器
- 技術分享| HTTP 代理HTTP
- Java 配置 HTTP/Socks 代理JavaHTTP
- go mod: 配置代理Go
- SOCKS代理與HTTP代理主要區別分析HTTP