2017-03-21 8 views
0

Goを使用して、外部WebサービスへのHTTP GET要求を行っています。何らかの理由で、応答の本文は常に空です。コンテンツの長さは常に0バイトです。応答ステータスコードは常に200ですが、Client.Doを呼び出すとエラーは返されません。このリクエストにはAuthorizationヘッダーが必要です。そのため、http.NewRequest/http.Client.Doパターンを使用してリクエストを送信しています(下記参照)。私は過去に似たようなリクエストをしてきましたが、ヘッダーを必要とするGETは使用しませんでした。これは原因ではないようですが、それが関連しているかどうかは疑問です。誰かがパターンを使って潜在的な問題を見つけたり、似たような経験をしていれば、本当に助けに感謝します。Golangでhttp.Client.Doを使用した空のHTTP応答

ありがとうございます。

if req, err := http.NewRequest("GET", "https://api.molt.in/v1/orders/11111111/items", nil); err != nil { 
    return nil, err 
} else { 
    client := &http.Client{} 
    req.Header.Add("Authorization", "secretToken") 

    if resp, err := client.Do(req); err != nil { 
     return nil, err 
    } else { 
     defer resp.Body.Close() 
     return readBody(resp.Body) 
    } 
} 
+10

エラーがなく、応答が200の場合、何が問題なのですか?身体を持っているという応答は必要ありません。ところで、あなたは一般的に、あなたが早期に戻るという選択肢を持っているときは、ネストされたif-elseを避けたい。ほとんどの人はこう書いています:https://play.golang.org/p/q0x8cNvrYw – JimB

+1

'resp.ContentLength'をチェックしましたか? 'readBody'は何をしますか? –

+1

curlで同じリクエストを実行した場合の結果はどうなりますか? – Zoyd

答えて

0

私はついにこの問題の原因を発見しました。それは行われた要求、または応答が受け取られていることとは関係がありませんでした。これは、応答の解析と関係がある。

私はbufio.NewScanner.Textを使用してレスポンス本文を文字列に変換しようとしていました。この呼び出しをioutil.ReadAllに置き換えると、当初期待していた文字列が出力されます。

ご迷惑をおかけして申し訳ありませんが、ご協力いただきありがとうございます。

関連する問題