मैं वेब एप का उपयोग एक पोस्टपॉइंट करने के लिए कर रहा हूं HttpClient
जो एक HTTP कुकी के रूप में लॉगिन की आवश्यकता है जो एक खाते की पहचान करता है (यह केवल कुछ ऐसा है #ifdef
जो रिलीज संस्करण से बाहर है)।
मैं कुकी कैसे जोड़ूं HttpRequestMessage
?
मैं वेब एप का उपयोग एक पोस्टपॉइंट करने के लिए कर रहा हूं HttpClient
जो एक HTTP कुकी के रूप में लॉगिन की आवश्यकता है जो एक खाते की पहचान करता है (यह केवल कुछ ऐसा है #ifdef
जो रिलीज संस्करण से बाहर है)।
मैं कुकी कैसे जोड़ूं HttpRequestMessage
?
जवाबों:
यहां बताया गया है कि आप अनुरोध के लिए कस्टम कुकी मान कैसे सेट कर सकते हैं:
var baseAddress = new Uri("http://example.com");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("foo", "bar"),
new KeyValuePair<string, string>("baz", "bazinga"),
});
cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));
var result = await client.PostAsync("/test", content);
result.EnsureSuccessStatusCode();
}
स्वीकार किए जाते हैं जवाब ज्यादातर मामलों में यह करने के लिए सही तरीका है। हालाँकि, कुछ स्थितियाँ ऐसी हैं जहाँ आप कुकी हेडर को मैन्युअल रूप से सेट करना चाहते हैं। आम तौर पर यदि आप एक "कुकी" शीर्षक सेट करते हैं तो इसे अनदेखा कर दिया जाता है, लेकिन ऐसा इसलिए है क्योंकि कुकीज़ के लिए HttpClientHandler
इसकी CookieContainer
संपत्ति का उपयोग करने में चूक है । आप की स्थापना करके फिर उस अक्षम करते हैं UseCookies
करने के लिए false
आप मैन्युअल रूप से कुकी हेडर सेट कर सकते हैं और वे अनुरोध, जैसे में दिखाई देगा
var baseAddress = new Uri("http://example.com");
using (var handler = new HttpClientHandler { UseCookies = false })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
var message = new HttpRequestMessage(HttpMethod.Get, "/test");
message.Headers.Add("Cookie", "cookie1=value1; cookie2=value2");
var result = await client.SendAsync(message);
result.EnsureSuccessStatusCode();
}
इस मुद्दे पर घंटों बिताने के बाद, ऊपर दिए गए किसी भी उत्तर ने मेरी मदद नहीं की, इसलिए मुझे एक बहुत उपयोगी उपकरण मिला।
सबसे पहले, मैंने विवरण में अपने वेब अनुरोधों का अध्ययन करने के लिए टेलरिक के फिडलर 4 का उपयोग किया
दूसरे, मैं फिडलर के लिए इस उपयोगी प्लगइन में आया:
https://github.com/sunilpottumuttu/FiddlerGenerateHttpClientCode
यह सिर्फ आपके लिए C # कोड जनरेट करेगा। एक उदाहरण था:
var uriBuilder = new UriBuilder("test.php", "test");
var httpClient = new HttpClient();
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, uriBuilder.ToString());
httpRequestMessage.Headers.Add("Host", "test.com");
httpRequestMessage.Headers.Add("Connection", "keep-alive");
// httpRequestMessage.Headers.Add("Content-Length", "138");
httpRequestMessage.Headers.Add("Pragma", "no-cache");
httpRequestMessage.Headers.Add("Cache-Control", "no-cache");
httpRequestMessage.Headers.Add("Origin", "test.com");
httpRequestMessage.Headers.Add("Upgrade-Insecure-Requests", "1");
// httpRequestMessage.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
httpRequestMessage.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");
httpRequestMessage.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
httpRequestMessage.Headers.Add("Referer", "http://www.translationdirectory.com/");
httpRequestMessage.Headers.Add("Accept-Encoding", "gzip, deflate");
httpRequestMessage.Headers.Add("Accept-Language", "en-GB,en-US;q=0.9,en;q=0.8");
httpRequestMessage.Headers.Add("Cookie", "__utmc=266643403; __utmz=266643403.1537352460.3.3.utmccn=(referral)|utmcsr=google.co.uk|utmcct=/|utmcmd=referral; __utma=266643403.817561753.1532012719.1537357162.1537361568.5; __utmb=266643403; __atuvc=0%7C34%2C0%7C35%2C0%7C36%2C0%7C37%2C48%7C38; __atuvs=5ba2469fbb02458f002");
var httpResponseMessage = httpClient.SendAsync(httpRequestMessage).Result;
var httpContent = httpResponseMessage.Content;
string result = httpResponseMessage.Content.ReadAsStringAsync().Result;
ध्यान दें कि मुझे दो पंक्तियों पर टिप्पणी करनी थी क्योंकि यह प्लगइन अभी तक पूरी तरह से सही नहीं है लेकिन फिर भी इसने काम किया।
अस्वीकरण: मैं वैसे भी Telerik या प्लगइन लेखक द्वारा संबद्ध या समर्थन नहीं कर रहा हूँ।
मेरे लिए सरल समाधान HttpRequestMessage ऑब्जेक्ट में कुकीज़ सेट करने के लिए काम करता है ।
protected async Task<HttpResponseMessage> SendRequest(HttpRequestMessage requestMessage, CancellationToken cancellationToken = default(CancellationToken))
{
requestMessage.Headers.Add("Cookie", $"<Cookie Name 1>=<Cookie Value 1>;<Cookie Name 2>=<Cookie Value 2>");
return await _httpClient.SendAsync(requestMessage, cancellationToken).ConfigureAwait(false);
}