Я пытаюсь написать вращающийся прокси на Голанге.
нет проблем при прокси http: скопировал запрос клиента и перенаправил его.
Но когда я хочу переслать https - я не могу прочитать тело запроса, так как оно зашифровано.
Я узнал, что с помощью HTTP CONNECT можно создать туннель tcp, но я не могу заставить сторонний прокси-сервер работать.
Моя схема работы должна быть такой:
1) клиент -> 2) мой прокси-сервер -> 3) сторонний прокси-сервер -> 4) сайт, который хочет клиент
но сейчас я застрял между 2 и 3
Кто-нибудь может мне помочь?
я получаю этот код в качестве примера
https://github.com/hkwi/https_tproxy/blob/master/main.go
func handle(con net.Conn) {
defer con.Close()
req := &http.Request{
Method: "CONNECT",
Host: con.LocalAddr().String(),
URL: &url.URL{},
}
conOut, err := net.DialTimeout("tcp", "EXTERNALPROXYIP:8080", 2*time.Second)
if err != nil {
log.Printf("proxy error %v", err)
}
defer conOut.Close()
if err := req.WriteProxy(conOut); err != nil {
log.Printf("proxy error %v", err)
} else if res, err := http.ReadResponse(bufio.NewReader(conOut), req); err != nil {
log.Printf("proxy error %v", err)
} else if res.StatusCode != 200 {
log.Printf("proxy error %v", err)
} else {
sent := make(chan bool)
go func() {
_, err := io.Copy(conOut, con)
if err != nil {
log.Printf("proxy error %v", err)
}
close(sent)
}()
_, err := io.Copy(con, res.Body)
if err != nil {
log.Printf("proxy error %v", err) ------> ERROR
}
_ = <-sent
}
}
У меня есть проблема
ошибка прокси неверного байта в длине фрагмента