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대신 ContinueWithtask.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.