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={フォームのエンコードされた値}」です。その 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

HTTP 応答の「Set-Cookie」ヘッダーを確認できます。

于 2012-11-08T09:20:15.693 に答える
0

Cookie を取得して、次の POST のために再指定する必要はありません。HttpClient がそれを処理します。

POST 先の 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 に答える