c# - HTTP 客户端 Cookie c#

标签 c# post cookies http-headers httpclient

我正在尝试通过通用方法设置 cookie 和获取 cookie。

我看到了这个有效的示例,但我在更改我自己的代码以保持我的一般功能的方式时遇到了麻烦。

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;

HttpClient client = new HttpClient(handler);
HttpResponseMessage response = client.GetAsync("http://google.com").Result;

Uri uri = new Uri("http://google.com");
IEnumerable<Cookie> responseCookies = cookies.GetCookies(uri).Cast<Cookie>();
foreach (Cookie cookie in responseCookies)
Console.WriteLine(cookie.Name + ": " + cookie.Value);

Console.ReadLine();

我的代码:

public static HttpClient CreateClientASMtoken(string tokenVal)
{
    var httpClient = new HttpClient
    {
        BaseAddress = new Uri(urlASM)
    };
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    //httpClient.DefaultRequestHeaders.Accept.Add(new Cookie("token", tokenVal));
    return httpClient;
}

注释代码是我为实现这一目标所做的尝试之一。我使用的另一种通用方法是:

public static async Task<HttpResponseMessage> PostASM(string path, object content)
{
    string tokenVal = "d2GpEA5r8pwLRcOPxgaygPooldz2OZ2HUZzZ0YDPAOYCIiH4u5";            
    using (var client = CreateClientASMtoken(tokenVal))
    {
        var json = JsonConvert.SerializeObject(content);
        var serializedContent = new StringContent(json, Encoding.UTF8, "application/json");
        var postResponse = await client.PostAsync(path, serializedContent);
        
        //string response = await postResponse.Content.ReadAsStringAsync();
        return postResponse;
    }
}

编辑: 我也试过这个:

enter image description here

但它显示错误,URL 和 token 都没有问题。

最佳答案

我找到了一种轻松解决问题的方法。感谢做出贡献的人。

public static async Task<string> GetASM(string path)
{
    string tokenVal = "d2GpEA5r8p...";
    Uri uriASM = new(urlASM);
    var cookieContainer = new CookieContainer();

    using var handler = new HttpClientHandler()
    {
        CookieContainer = cookieContainer,
    };

    using var client = new HttpClient(handler)
    {
        BaseAddress = uriASM,
    };

    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));

    cookieContainer.Add(uriASM, new Cookie("token", tokenVal));
    var getResponse = await client.GetAsync(path);
    return await getResponse.Content.ReadAsStringAsync();
}

关于c# - HTTP 客户端 Cookie c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867242/

相关文章:

javascript - 我们可以仅使用 javascript 访问发布/获取数据吗?

javascript - 注销并删除 Cookie [重定向到主页]

javascript - Cookie 为空,但在浏览器中有一个值

java - 如何从 Java 中的 post 请求中提取 httponly cookie?

javascript - 无法将图像文件从 ng-file-upload 上传到 Web api

C# rijndael CryptoStream 我可以像 textwriter 那样写入文件吗?

c# - 如何减慢动画gif

c# - 请解释WCF中客户端证书的概念

javascript - 将一个 _fixed_ 变量发布到弹出窗口

json - 如何使用 Jackson (2.x) 提供程序设置 Jersey 客户端以处理 POST 请求