2015-12-30 4 views
-2

Я писал прокси-сервер, как приложение для Linux в golang. При запуске приложения будут прослушиваться все TCP-соединения и перенаправлять их на адрес прокси-сервера. Между приложением также добавляется заголовок «Прокси-авторизация: основной ...» в заголовки HTTP. Когда я увидел заголовки TCP, я не смог получить заголовки HTTP. Где я ошибаюсь или как я могу извлечь данные HTTP? Есть ли другой способ достичь этого?Получение заголовков HTTP из TCP-соединений

+3

Основная проблема заключается в том, что TCP-соединение не знает об HTTP. Вероятно, вы должны использовать метод 'net/http.ReadRequest' для анализа HTTP-запроса, который должен предоставить вам доступ к заголовкам HTTP. См. [Doc] (https://golang.org/pkg/net/http/#ReadRequest). – Elwinar

+0

Я мало знаю о golang, но в c/C++ я могу читать сокет fd, используя системный вызов read(), и получаю head/content http-запроса. –

+0

Спасибо ... Но когда я передал ему «искаженный HTTP-запрос» ..... Это не так, как мне кажется –

ответ

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])) 
     } 
}