3

我尝试使用来自 System.net.http 的新 .net 4.5 HttpClient。

我这样设置我的客户

CookieContainer cookieJar = new CookieContainer();
         HttpClientHandler handler = new HttpClientHandler
         {
             CookieContainer = cookieJar,
             AllowAutoRedirect = true
         };
         handler.UseCookies = true;
         handler.UseDefaultCredentials = false;

         HttpClient client = new HttpClient(handler as HttpMessageHandler);

然后我做一个client.GetAsync(url)

现在我正在检查响应并尝试获取下一篇文章的 cookie/会话值。

我尝试通过代码测试现有页面的登录场景......

如何在响应中获取 cookie 信息?还是我在这里走错了路?任何解释都会很棒......

4

3 回答 3

3

cookie 以标头的形式存在,该标头是在客户端上创建 cookie 的指令。这些标头具有“Set-Cookie”形式作为实际标头,其值为“CookieTitle={form encoding value}”。获取该 cookie 如下所示:

var cookieTitle = "MyCookieTitle";

var response = ... // get response object
var cookie = response.Headers.GetValues("Set-Cookie").First(x => x.StartsWith(cookieTitle));

这将为您提供标头的原始字符串,如下所示:

CookieTitle=this+is+the+value+of+the+cookie
于 2014-08-27T19:36:47.750 回答
0

您无需获取 cookie 并为您的下一个 POST 重新指定它们。HttpClient 会为你做这件事。

只要您发布到的 URL 在 cookie 定义的路径内,cookie 就会自动随请求一起重新发送。

例如,如果您像这样创建 cookie,

 public class CookieController : ApiController
    {
        public HttpResponseMessage Get() {
            var httpResponseMessage = new HttpResponseMessage();
            var cookieHeaderValues = new List<CookieHeaderValue>();
            cookieHeaderValues.Add(new CookieHeaderValue("foo","bar") 
                                         {Domain = "myhost",Path = "/"});
            httpResponseMessage.Headers.AddCookies(cookieHeaderValues);
            return  httpResponseMessage;
        }
    }

对以下任何 URL 的任何请求都http://myhost/ 将自动发送到此 cookie。

于 2012-11-08T15:53:52.093 回答
0

您可以检查 HTTP 响应的“Set-Cookie”标头。

于 2012-11-08T09:20:15.693 回答