我想向HTTP服务器发出一个POST请求,但是我需要在请求中“包含”一个cookie,我有cookie,但是我不知道如何处理cookie容器
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.Accept = "text/javascript, text/html, application/xml, text/xml, */*";
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
request.Host = "url.com";
request.UserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11";
request.Referer = "http://url.com";
request.Headers.Add("X-Requested-With", "XMLHttpRequest");
request.Headers.Add("X-Prototype-Version", "1.7");
request.Headers.Add("Accept-Encoding: gzip, deflate");这是一个小甜饼:
曲奇recentlyVisitedAppHubs=233450%2C231430%2C48110%2C45760;Language=spanish;strInventoryLastContext=440_2;__utma=268881843.118202637.1372069740.1373472452.1373473085.10;__utmb=268881843.21.10.1373473085;__utmz=268881843.1373473085.10.4.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided);rgTopicView_General_4312225=%7B%22828934913396342649%22%3A%221373450285%22%2C%22846939615003500718%22%3A1373473557%7D;timezoneOffset=7200,0;sessionid=NDExNjE1NDE5;Login=765611979917322708A9C768;steamRememberLogin=76561197991732272;__utma=268881843.118202637.1372069740.1373472452.1373473085.10;__utmb=268881843.22.10.1373473085;__utmz=268881843.1373473085.10.4.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided);__utmc=268881843
但我不知道如何将该cookie转换为Cookie容器,然后将其添加到请求中。request.CookieContainer = cookie;
发布于 2013-07-11 13:31:22
//build uri and cookie
Uri uri = new Uri("domain");
Cookie cookie = new Cookie("name", "value");
//build request
HttpWebRequest request = WebRequest.Create("domain") as HttpWebRequest;
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(uri, cookie);资源:
发布于 2016-09-24 01:07:27
String CookieStr = "recentlyVisitedAppHubs=233450%2C231430%2C48110%2C45760;
Language=spanish; strInventoryLastContext=440_2";
CookieContainer cookiecontainer = new CookieContainer();
string[] cookies = CookieStr.Split(';');
foreach (string cookie in cookies)
cookiecontainer.SetCookies(new Uri("http://url.com"), cookie);
request.CookieContainer = cookiecontainer;发布于 2022-08-02 19:37:23
很抱歉出现了“匆忙”代码,但这是我将字符串解析为cookie选项、键、值的方法。
public class CookieWithOptions
{
CookieOptions options { get; set; } = new CookieOptions();
string Key { get; set; } = default!;
string Value { get; set; } = default!;
}
public static class CookieProperties
{
public const string Expires = "expires";
public const string Expired = "expired";
public const string Path = "path";
public const string Domain = "domain";
public const string Secure = "secure";
public const string SameSite = "sameSite";
public const string HttpOnly = "httpOnly";
public const string MaxAge = "maxAge";
public const string IsEssential = "isEssential";
}从CookieWithOptions方法获得ExtractCookie:
var cookie = ExtractCookie(cookieString);ExtractCookie实现:
private CookieWithOptions ExtractCookie(string cookieString)
{
CookieWithOptions cookie = new();
var parts = cookieString!.Split("; ");
var claims = new Dictionary<string, string>();
foreach (var part in parts)
{
var keyValuePair = part.Split('=');
claims.Add(keyValuePair.First(), keyValuePair.Last());
}
SetCookieOptions(claims, cookie);
return cookie;
}SetCookieOptions:
public void SetCookieOptions(
Dictionary<string, string> claims,
CookieWithOptions cookie)
{
foreach (var claim in claims)
{
switch (claim.Key)
{
case CookieProperties.Expires:
cookie.Options.Expires = DateTime.ParseExact(
claim.Value,
"ddd, d MMM yyyy HH:mm:ss GMT",
CultureInfo.GetCultureInfoByIetfLanguageTag("en-us"),
DateTimeStyles.AdjustToUniversal);
break;
case CookieProperties.Secure:
cookie.Options.Secure = bool.Parse(claim.Value);
break;
case CookieProperties.IsEssential:
cookie.Options.IsEssential = bool.Parse(claim.Value);
break;
case CookieProperties.SameSite:
cookie.Options.SameSite = Enum.Parse<SameSiteMode>(claim.Value);
break;
case CookieProperties.Path:
cookie.Options.Path = claim.Value;
break;
case CookieProperties.Domain:
cookie.Options.MaxAge = TimeSpan.Parse(claim.Value);
break;
case CookieProperties.HttpOnly:
cookie.Options.HttpOnly = bool.Parse(claim.Value);
break;
default:
cookie.Key = claim.Key;
cookie.Value = claim.Value;
break;
}
}
}还要确保CookieProperties中的两个单词选项(例如,isEssential )的格式是正确的,因为我不确定它是否应该保留camelCase :)
https://stackoverflow.com/questions/17594618
复制相似问题