2017-12-19 16 views
-3

タイトルです。 ステータスコードのみが必要です。レスポンスボディではありません。どのように私は唯一のPOST要求のステータスコード(ボディなし)を得ることができます

package main 

import (
    "fmt" 
    "net/http" 
) 

func main() { 
    req, _ := http.NewRequest("POST", "http://api.example.com/getUserList", nil) 
    res, _ := http.DefaultClient.Do(req) // <-- 300KB Full page downloading here 
    fmt.Print("status code", res.StatusCode) 
} 

ステータスコードが取得された後に応答ストリームを中断するにはどうすればよいですか? (またはその可能性?)

おかげ

+1

これはHEADの対象です。 – Volker

+2

@Volker私は、OPがリソースを作成するために 'POST'を使うRESTful Webサービスで働いていると感じています。なぜなら、レスポンスボディを無視したい理由が想像できます。 –

+0

@ Volkerしかし、私はそのようなサーバー上でPOST要求を行う必要があります。私は頭や他の方法を使用することはできません。 –

答えて

1

短い答えは、それはおそらくことはできません...です。

は、一般的に言えば、HTTPクライアントは常にそれはHTTPの動作だけでどのようにあるので、本体を含む任意の応答のための完全な応答(ステータス、ヘッダ、体)を取得します。 "HEAD"メソッドはあなたが望むものを具体的に行いますが、 "POST"メソッドを使用する必要があるので、ここでは当然適用されません。

コメント者が述べたように、ある意味ではレスポンスボディを無視することはできますが(現在の例ではそうですが)、クライアントシステムではボディをダウンロードするためのネットワークコストが発生します。あなたのアプリケーションの表面。

理論的には、HTTPステータスが取得されるとすぐに基本のTCP接続を終了しようとし、残りのHTTP応答を無視するようにカスタムHTTPクライアントを実装できます(またはおそらく既存のクライアントを構成することも可能です)。しかしながら、この戦略は非常に複雑であり、アプリケーションの制御不能である多数の要因の影響を受けやすい。

最終的に、サンプルコードはおそらくステータスコードにのみ注意を払い、応答本体を無視するために行うことができます。応答リーダをすぐに閉じて、関連するリソースが不要ですぐに解放できることをHTTPライブラリに示すことができます。しかし、何らかの効果があるという保証はありません。さらに、本体を閉じる前に使用するリソースを最小限に抑えるために、レスポンス本体に対して非常に小さなバッファを使用するようにHTTPクライアントを構成することもできますが、実際に応答本体が実際にはネットワークを介して送信されます。

+0

私は第2段落を理解しているか分からない。あなたが実際にそれを読んでいない限り、クライアントはフルボディをダウンロードしません(比較的小さなバッファに引かれたものを引いたものを差し引いたもの)。本文を読み取らずに本文を閉じると、トランスポートは終了して接続を破棄し、サーバーが引き続き送信する場合はRSTになります。 – JimB

関連する問題