Я писал прокси-сервер, как приложение для Linux в golang. При запуске приложения будут прослушиваться все TCP-соединения и перенаправлять их на адрес прокси-сервера. Между приложением также добавляется заголовок «Прокси-авторизация: основной ...» в заголовки HTTP. Когда я увидел заголовки TCP, я не смог получить заголовки HTTP. Где я ошибаюсь или как я могу извлечь данные HTTP? Есть ли другой способ достичь этого?Получение заголовков HTTP из TCP-соединений
-2
A
ответ
1
Я также новичок в golang, но ниже код работает для меня до получения HTTP-данных из tcp-сокета.
package main
import "net"
import "fmt"
import "io"
func main() {
fmt.Println("Launching server...")
ln, _ := net.Listen("tcp", ":8081")
conn, _ := ln.Accept()
tmp := make([]byte,256)
for {
n,err := conn.Read(tmp)
if err != nil {
if err != io.EOF {
fmt.Println("read error:", err)
}
break
}
fmt.Println("rx:", string(tmp[:n]))
}
}
Основная проблема заключается в том, что TCP-соединение не знает об HTTP. Вероятно, вы должны использовать метод 'net/http.ReadRequest' для анализа HTTP-запроса, который должен предоставить вам доступ к заголовкам HTTP. См. [Doc] (https://golang.org/pkg/net/http/#ReadRequest). – Elwinar
Я мало знаю о golang, но в c/C++ я могу читать сокет fd, используя системный вызов read(), и получаю head/content http-запроса. –
Спасибо ... Но когда я передал ему «искаженный HTTP-запрос» ..... Это не так, как мне кажется –