2014-07-24 1 views
1

golang 프로그램에서 모두 소문자 헤더를 설정하려고 시도 중이고 CanonicalMIMEHeaderKey가 첫 글자를 대문자로 표시하려고합니다. 내가 소비하는 API는 현재이 특정 헤더를 모두 소문자로 사용합니다. 이 시점에서 변경하는 것은 옵션이 아닙니다. 그 방법을 무시할 수 있습니까?golang http 요청에 변경되지 않은 소문자 헤더 추가

req.Header.Add("myheader", "myheadervalue") 

그러나로 나오는 :

http://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey

그래서 예를 들어, 내가 추가 할 헤더입니다

req.Header.Add("Myheader", "myheadervalue") 

수있는 사람의 도움이 될까요?

감사

답변

4

나는이 문제를 회피 할 수있는 방법이 표시되지 않습니다하지만 당신이 정말로 소문자 헤더 이름을 사용하는 경우, 당신은 소문자 키를 사용하여 자신의 http.Header을 만들어이 문제를 해결할 수 있습니다. 예 (on play) : http.Header 이후

import "fmt" 
import "strings" 
import "net/http" 

// ... 

req, _ := http.NewRequest("GET", "http://foo", nil) 
req.Header.Add("myheader", "myheadervalue") 

lowerCaseHeader := make(http.Header) 

for key, value := range req.Header { 
    lowerCaseHeader[strings.ToLower(key)] = value 
} 

req.Header = lowerCaseHeader 
1
나는 비슷한 문제로 실행하고 나는 미래에이 게시물에 오는 다른 사람에게 도움이 될 거라고 생각 약간 다른 방식을 해결

...

입니다 후드 아래에 map[string][]string 만 있으면 http.Header를 만들고 요청 헤더에 할당 할 수 있습니다. Add 메서드 나 Set 메서드를 사용하지 않기 때문에 케이싱이 유지됩니다.

과 같이 :

import "net/http" 

// ... 

headers := http.Header{ 
      "my-lowercase-header": []string{"myvalue1"}, 
      "Accept": []string{"text/plain", "text/html"}, 
     } 

client := &http.Client{} 

req, err := http.NewRequest("GET", "http://www.example.com", nil) 
if err != nil { 
    panic(err) 
} 

req.Header = headers 

resp, err := client.Do(req) 
관련 문제