невозможно добавить cookie в httpwebrequest, полученный с первого запроса в wp7 - PullRequest
1 голос
/ 02 июня 2011

печенье получено из первого запроса:

private void PostResponseCallback(IAsyncResult asyncResult)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
                Stream content = response.GetResponseStream();
                SESSIONID = response.Headers["Set-cookie"].ToString();
                if (request != null && response != null)
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (StreamReader reader = new StreamReader(content))
                        {
                            string _responseString = reader.ReadToEnd();
                            ResponseString = _responseString;
                            reader.Close();
                        }
                    }
                }
            }

Невозможно установить печенье во втором запросе

public void AccDetialsGetResponse()
        {
            try
            {

                //CookieContainer cc1 = new CookieContainer();
                CookieCollection collection = new CookieCollection();
                SESSIONID = SESSIONID.Replace("; Path=/", "");
                Cookie cook = new Cookie();
                cook.Name = "cookie";
                cook.Value = SESSIONID;
                collection.Add(cook);

                //cc1.Add(new Uri(strHttpsUrl), cccs);
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strHttpsUrl);

                req.ContentType = "text/xml;charset=\"utf-8\"";
                req.Accept = "text/xml";
                req.Method = "POST";
                req.CookieContainer = new CookieContainer();
                req.CookieContainer.Add(new Uri(strHttpsUrl), collection);
                req.BeginGetRequestStream(AccDetailsPostRequest, req);
}

Пожалуйста, предоставьте решение вышеуказанной проблемы ...

1 Ответ

0 голосов
/ 16 августа 2011

Оказывается, вам лучше захватить хранилище cookie с первого запроса (например, так)

//keep in mind ResponseAndCookies is just a hand rolled obj I used to hold both cookies and the html returned during the response
private ResponseAndCookies ReadResponse(IAsyncResult result)
    {
        Stream dataStream = null;
        HttpWebRequest request = (HttpWebRequest) result.AsyncState;
        HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
        reader.Close();
        dataStream.Close();
        response.Close();   

        var responseAndCookies = new ResponseAndCookies
                                     {CookieContainer = request.CookieContainer, Markup = responseFromServer};

        return responseAndCookies;
    }

И использовать это хранилище непосредственно при создании нового запроса.(вместо того, чтобы вручную добавлять cookie, как у вас изначально)

public void Checkout(ResponseAndCookies responseAndCookies)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/checkout");
        request.ContentType = "application/json";
        request.CookieContainer = responseAndCookies.CookieContainer; 
        request.Method = "POST";
        request.AllowAutoRedirect = false;
        request.Accept = "application/json";

        request.BeginGetRequestStream(new AsyncCallback(GetRequest), request);
    }

Примечание - если файлы cookie, которые вы распространяете, являются ТОЛЬКО HTTP, это на самом деле единственный способ справиться с ними (в текущем выпуске Windowsтелефон 7)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...