2016-09-13 1 views
0

내 오류가 여기에 설명 잘 : 그것은 HTTP 패키지의 개념을 오해하는 경우 https://github.com/golang/go/issues/17088Golang는 내부 요청 '몸'의 흔적을 유지 http.Request

나도 몰라하지만 난을 반환하지 요청이 전송 된 후 "body"(내 POST 요청이 보내는 매개 변수) 요청이 전송되었습니다 (client.Do).

예 :

func showRequestBody(r *http.Request) { 
    fmt.Println(r) 
    fmt.Println(r.Body) 
} 

나에게 빈지도를 주거나 내가 할 때 r.Form 또는 r.PostForm가 존재하지 않거나 비어 있습니다.

감사합니다 :)합니다 (GitHub의 링크에 대한 더 많은 정보와 좋은 코드 하이라이트는)

답변

0

몸은 문자열하지만 리더 (더 구체적으로 ReadCloser)이 아니다. 몇 바이트를 읽을 때 스트림에서 가져 오면 다시 읽을 수 없습니다.

본문을 보내기 전에 실제로 가로 챌 필요가 있고 소스에서 다시 읽을 수없는 경우 버퍼에서 새 ReadCloser를 재구성하기 전에 해당 내용을 버퍼로 읽는 것이 해결책입니다.

편집 시점 :이 시점에서 나는 이것이 대부분 Reading body of http.Request without modifying request state?의 복제임을 알고 있으며 그와 같이 닫습니다. 아무것도 가져 오지 않으면 대답을 삭제할 수 있습니다.

+0

그런데 왜 내가 할 때 n._lastRequest = * REQ \t fmt.Println (n._lastRequest) 내가 몸을 가지고와 client.Do 후에 내가 그것을 잃어 요청하기 전에 ? –

+0

물론 : [스트림] (https://en.wikipedia.org/wiki/Stream_ (컴퓨팅))의 "컨텐츠"전송은 해당 컨텐츠를 읽음으로써 수행됩니다. –