HttpClient에 Http 헤더 추가


158

모두:

웹 서비스에 요청을 보내기 전에 HttpClient에 http 헤더를 추가해야합니다. HttpClient와는 달리 모든 요청에 ​​대해 개별 요청에 대해 어떻게합니까? 이것이 가능한지 확실하지 않습니다.

var client = new HttpClient();
var task =
    client.GetAsync("http://www.someURI.com")
    .ContinueWith((taskwithmsg) =>
    {
        var response = taskwithmsg.Result;

        var jsonTask = response.Content.ReadAsAsync<JsonObject>();
        jsonTask.Wait();
        var jsonObject = jsonTask.Result;
    });
task.Wait();

답변:


245

을 HttpRequestMessage만들고 방법을 GET으로 설정하고 헤더를 설정 한 다음 SendAsync대신 사용하십시오 GetAsync.

var client = new HttpClient();
var request = new HttpRequestMessage() {
    RequestUri = new Uri("http://www.someURI.com"),
    Method = HttpMethod.Get,
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
var task = client.SendAsync(request)
    .ContinueWith((taskwithmsg) =>
    {
        var response = taskwithmsg.Result;

        var jsonTask = response.Content.ReadAsAsync<JsonObject>();
        jsonTask.Wait();
        var jsonObject = jsonTask.Result;
    });
task.Wait();

2
고마워, 대럴! 당신이 HttpClient할 수있을 때까지 실망 했습니다.
— Sam

23
@Talon 그것이 406의 의미입니다. 클라이언트가 서버에서 지원하지 않는 미디어 유형을 요청했습니다. 어떤 종류의 용지를 사용하든 상관 없으면 요청하지 마십시오. OP는 단순히 요청에 헤더를 추가하는 방법을 묻고있었습니다. 방금 임의의 예를 골랐습니다.
— Darrel Miller

15
당신은 아마 원하는 요즘 var response = await client.SendAsync대신 ContinueWith과task.Wait()
— 마이클 파커

1
@MichaelParker 실제로.
— 대럴 밀러

1
최상의 성능을 위해서는 이와 같은 HTTP 클라이언트를 인스턴스화하지 않아야합니다. 당신은 여기에 대한 자세한 내용을보실 수 있습니다 stackoverflow.com/a/15708633/1406930
— ScottBurfieldMills

16

모든 요청에 ​​대해 동일한 헤더 일 수 있거나 각 요청 후에 클라이언트를 삭제하면 다음 DefaultRequestHeaders.Add옵션을 사용할 수 있습니다 .

client.DefaultRequestHeaders.Add("apikey","xxxxxxxxx");      

3
앞으로 HttpClient가 보낸 모든 메시지에 헤더가 추가된다고 생각합니다. 이는 OP의 요점과 모순된다 : "모든 미래 요청에 대한 HttpClient와 달리 개별 요청에 대해 어떻게해야합니까?" HttpClient 인스턴스는 한 번 만들어지고 여러 번 사용되도록 설계되었습니다.
— Flydog57

요청에 사용자 정의 헤더를 설정하려면 http 서버로 보내기 위해 httpclient로 전달하기 전에 사용자 정의 헤더로 요청을 빌드하십시오. 기본 요청 헤더는 httpclient에서 모든 요청을 서버로 보내도록 설정됩니다.
— 짐바

0

요청시 사용자 정의 헤더를 설정하려면 http 서버로 보내기 위해 httpclient로 전달하기 전에 사용자 정의 헤더로 요청을 빌드하십시오. 예 :

HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
  .setUri(someURL)
  .setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
  .build();
client.execute(request);

기본 헤더는 SET ON HTTPCLIENT이며 모든 요청을 서버로 보냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.