首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#从字符串创建cookie并发送

C#从字符串创建cookie并发送
EN

Stack Overflow用户
提问于 2013-07-11 13:25:03
回答 3查看 18.1K关注 0票数 5

我想向HTTP服务器发出一个POST请求,但是我需要在请求中“包含”一个cookie,我有cookie,但是我不知道如何处理cookie容器

代码语言:javascript
复制
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;

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-11 13:31:22

代码语言:javascript
复制
//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);

资源:

票数 5
EN

Stack Overflow用户

发布于 2016-09-24 01:07:27

代码语言:javascript
复制
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;
票数 6
EN

Stack Overflow用户

发布于 2022-08-02 19:37:23

很抱歉出现了“匆忙”代码,但这是我将字符串解析为cookie选项、键、值的方法。

代码语言:javascript
复制
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:

代码语言:javascript
复制
var cookie = ExtractCookie(cookieString);

ExtractCookie实现:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17594618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档