উত্তর:
আপনি কীভাবে অনুরোধের জন্য কাস্টম কুকি মান সেট করতে পারেন তা এখানে:
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
এটি কেবল আপনার জন্য সি # কোড উত্পন্ন করবে। একটি উদাহরণ ছিল:
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;
নোট করুন যে আমাকে দুটি লাইন মন্তব্য করতে হয়েছিল কারণ এই প্লাগইনটি এখনও সম্পূর্ণ নিখুঁত নয় তবে তবুও এটি কাজটি করেছিল।
অস্বীকৃতি: আমি কোনওভাবেই টেলিগ্রিক বা প্লাগইন এর লেখক দ্বারা অনুমোদিত বা অনুমোদিত নই।
আমার জন্য সহজ সমাধানটি 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);
}