2014-03-28 11 views
0

https 기반 API에 요청하고 있습니다. Chrome에 요청 URL을 입력하면 모든 것이 정상적으로 작동합니다. 나는 그 차이가 무엇인지 알 필요가 크롬을 가정하고 어떻게 든 약간 다른 HTTP 요청을 전송 이동 때문에HTTP 요청 본문을 보냅니다.

"error": { 
    "type": "ApiUnknown", 
    "message": "No api specified (via subdomain)" 
} 

: 이동에 net/http 패키지를 사용하여 동일한 요청을 수행 할 때, 나는없는 하위 도메인에 대한 오류를 얻을 수 .

Chrome에서는 개발자 도구를 사용하여 전송 된 요청을 볼 수 있습니다.

http 패키지에서 HTTP 요청 본문을 보내려면 어떻게해야합니까?

나는 다음과 같은 작업을 수행 할 수

package main 

import (
    "net/http" 
    "os" 
) 

func main() { 
    urlStr := "https://api-name.subdomain.domain.org/page?param=value" 

    //client := &http.Client{} 
    req, err := http.NewRequest("GET", urlStr, nil) 
    if err != nil { 
     panic(err) 
    } 
    req.Write(os.Stdout) // Will this output be equal to the one being sent to the server? 
    //resp, err := client.Do(req) 
} 

출력 :

GET/페이지 PARAM = 값 HTTP/1.1
호스트 : API-name.subdomain.domain. org
사용자 에이전트 : Go 1.1 패키지 http

놀이터 :http://play.golang.org/p/Oku0O1yiBt

하지만이 요청이 전송하거나,이 사실 인 경우 모두가 전에 전송 뭔가를 추가 여부를 모르겠습니다.

+0

요청이 전송 될 때 추가 헤더가 설정 될 수 있습니다 (예 : URL에 기본 인증 자격 증명이있는 경우 '권한 부여', 리디렉션의 경우 '리퍼러'등). 서버가 요청을 거절하는 이유에 대해 많은 정보를 제공하지는 못했습니다. –

+0

@JamesHenstridge : 네, 그렇다고 생각했습니다. 그리고 아는 것이 없기 때문에 많은 정보를 제공하지 않았습니다. 그래서 실제 요청 본문을보고 싶습니다. 나는 똑같은'urlStr'을 가져 와서 같은 컴퓨터에있는 크롬에 붙이고 다른 응답을 얻는다. Go http 요청이 제공하는 실제 응답을 추가했습니다. – ANisus

+0

urlStr이 실제 URL (물론, duh)이 아니지만 동일한 구조를 가졌을 수도 있습니다. 그것은'api-name'에 대시 (dash)를 가지고있어서, 잠시 Go는 URL에 대시가 인코딩되어 있다고 생각했지만, 그렇지 않습니다. – ANisus

답변

0

방금 ​​net/http 표준 라이브러리를 살펴 보았습니다. James Henstridge가 이미 대답했듯이 몇 가지 추가 승인 및 전송 관련 헤더가 추가 될 수 있습니다. 그러나 이것은 모두 프로토콜을 엄격하게 준수합니다. 그래서 저는 거기에 아무 것도 없다고 생각하지 않을 것입니다.

예제 하단의 코드는 실제로 모든 관련 정보를 인쇄해야합니다. 이제 귀하의 요청이 실패한 구체적인 사례에 따라 다릅니다.

올바른 하위 도메인을 지정 했습니까 (오류 메시지에 명시된대로)?

Content-Type 헤더 세트가 있습니까? 서버는 선택한 하위 도메인에 따라 적절한 Content-Type을 확인할 수 있습니다.

다음은이 단계에서 내가 할 수있는 몇 가지 가정에 불과합니다.

관련 문제