Самый эффективный способ чтения заголовков HTTP из файла? - PullRequest
0 голосов
/ 02 января 2019

Я ищу эффективный способ чтения заголовков HTTP из текстового файла, который впоследствии будет отправлен с запросом HTTP.Рассмотрим следующий код (который в настоящее время содержит базовые функции запросов net / http):

func MakeRequest(target string, method string) {
client := &http.Client{}
req, _ := http.NewRequest(method, target, nil)

//Headers manually..
req.Header.Add("If-None-Match", `some value`)

response, _ := client.Do(req)
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
}

Я начал с использования ioutil.ReadFile, например:

func main() {
data, _ := ioutil.ReadFile("/opt/tests/req.txt")
fmt.Print(string(data))
}

Но, взяв этот текст, разбивэто с помощью некоторого индикатора (скажем, ":"), а затем размещение информации в заголовке req.Header.Add ("var1", "var2") выглядит как перебор.

Вопрос: Есть ли лучший способ отправить HTTP-запросы с заголовками из текстового файла в go?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Если вы хотите, чтобы только некоторые заголовки были определены, другой вариант - определить заголовки в файле Json и применить следующий код (чтение файла не включено):

var jsonMap map[string]string
err = json.Unmarshal(jsonBytesFromFile, &jsonMap)
if err != nil {
    log.Fatal("unable to parse json: ", err)
}

for k, v := range jsonMap {
    log.Printf("setting Header : %s : %s", k, v)
    responseWriter.Header().Add(k, v) // you may prefer Set()
}

Json выглядит так:

{ 
    "Content-type": "text/plain",
    "Cache-Control": "only-if-cached"
}
0 голосов
/ 02 января 2019

net / http имеет метод ReadRequest , который может создать новый Request объект из bufio.Reader.Предполагая, что ваш файл содержит реальный HTTP-запрос (а не только часть запроса, состоящую из строк с key: value), все, что вам нужно сделать, - это создать новый bufio.Reader из файла, то есть так (обработка ошибок опущена)):

rdr,_ := os.Open("req.txt")
req,_ := http.ReadRequest(bufio.NewReader(rdr))
fmt.Printf("%+v\n", req)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...