How to parse HttpWebResponse.Headers.Keys for a Set-Cookie session id returned

后端 未结 4 548
名媛妹妹
名媛妹妹 2020-12-13 07:46

I\'m trying to create an HttpWebRequest/HttpWebResponse session with an ASP.NET website to later parse an HTML form through url params (this part I know how to do), but I do

相关标签:
4条回答
  • 2020-12-13 07:56

    The answer from Dan Herbert helped me really. I appreciate your help.

    Just want to post my usage - hope it helps some one at some point of time. My requirement is that I need to send back cookies from first http post response to second http post request.

    1st:

    CookieContainer cookieJar = new CookieContainer();
    request.CookieContainer = cookieJar;
    ....
    
    CookieCollection setCookies = cookieJar.GetCookies(request.RequestUri);
    

    2nd:

    CookieContainer cc = new CookieContainer();
    cc.Add(setCookies);    
    request.CookieContainer = cc;
    
    0 讨论(0)
  • 2020-12-13 08:02

    hum I may be wrong but from what I am observing lately

    Cookies from a first response, don't include the 'set cookie' as cookies that come in the header (for example some session id...) in the case of a 302 (redirect) status

    If the autofollowredirect is set to true, then the set cookie are processed, and the subsequent request which is done automatically, will include those cookies defined by set cookie on the first call

    If autofollowredirect is set to false then the first request doesn't get the cookies positionned by the set cookie, and I guess and this is also my queston if anyone know, that the only way to subsequently have those cookies in next request, is parse the set cookies ?

    0 讨论(0)
  • 2020-12-13 08:09

    I have the same problem (with amazon) I use the following regexp:

    string regexp = "(?<name>[^=]+)=(?<val>[^;]+)[^,]+,?";);
    MatchCollection myMatchCollection = Regex.Matches(cookiesStr, regexp);
    foreach (Match myMatch in myMatchCollection)
    {
    string cookieName = myMatch.Groups["name"].ToString();
    string cookieVal = myMatch.Groups["val"].ToString();
    Cookie cookie = new Cookie(cookieName, cookieVal);
    cookies.Add(cookie);
    }

    Note that I only care about the cookie name/value...

    good luck Elia

    0 讨论(0)
  • 2020-12-13 08:19

    The .NET framework will manage cookies for you. You don't have to concern yourself with parsing the cookie information out of the headers or adding a cookie header to your requests.

    To store and send your session ID, use the Cookie and CookieContainer classes to store them and then make sure you send your cookies with every request.

    The following example shows how to do this. The CookieContainer, 'cookieJar' can be shared across multiple domains and requests. Once you add it to a request object, the reference to it will also be added to the response object when the response is returned.

    CookieContainer cookieJar = new CookieContainer();
    
    var request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
    request.CookieContainer = cookieJar;
    
    var response = request.GetResponse();
    
    foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
    {
        Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
    }
    

    The output of this code will be:

    Cookie['PREF']: ID=59e9a22a8cac2435:TM=1246226400:LM=1246226400:S=tvWTnbBhK4N7Tlpu

    0 讨论(0)
提交回复
热议问题