HttpClient में Http हेडर जोड़ना


158

सब:

वेब सेवा के लिए अनुरोध भेजने से पहले मुझे http हेडर को HttpClient में जोड़ना होगा। मैं व्यक्तिगत अनुरोध के लिए ऐसा कैसे कर सकता हूं (जैसा कि भविष्य के सभी अनुरोधों के लिए 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तब तक निराश था जब तक मैंने यह नहीं देखा कि आप ऐसा कर सकते हैं।
सैम

23
@ टेलन का मतलब 406 है। क्लाइंट ने मीडिया प्रकार के लिए कहा कि सर्वर समर्थन नहीं करता है। अगर आपको परवाह नहीं है कि आपको किस प्रकार का मीडिया मिलता है, तो एक मत पूछिए। ओपी बस पूछ रहा था कि अनुरोध करने के लिए हेडर कैसे जोड़ें। मैंने सिर्फ एक यादृच्छिक उदाहरण उठाया।
डेरेल मिलर

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 द्वारा भेजे जा रहे हैं। यह ओपी की बात का खंडन करता है: "मैं एक व्यक्तिगत अनुरोध के लिए ऐसा कैसे कर सकता हूं (जैसा कि भविष्य के सभी अनुरोधों के लिए HttpClient पर विरोध किया गया है)?" HttpClient उदाहरणों को एक बार बनाया जाता है और कई बार उपयोग किया जाता है।
फ्लाईडॉग 57

किसी अनुरोध पर कस्टम हेडर सेट करने के लिए, 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);

डिफ़ॉल्ट शीर्ष लेख सर्वर पर प्रत्येक अनुरोध पर भेजने के लिए HTTPCLIENT पर सेट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.