添加Http头到HttpClient

在向web服务发送请求之前,我需要向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();
210946 次浏览

创建一个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();

当所有请求的头都是相同的时,你可以在每个请求后释放客户端,你可以使用DefaultRequestHeaders.Add选项:

client.DefaultRequestHeaders.Add("apikey","xxxxxxxxx");
要在REQUEST上设置自定义报头,在将请求传递给httpclient发送给http服务器之前,使用自定义报头构建一个请求。 如:< / p >
HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
.setUri(someURL)
.setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
.build();
client.execute(request);

默认头是设置在HTTPCLIENT上,在每个请求发送到服务器。