加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-phone-7.1 – 在Windows Phone 7(Mango)上的HttpWebRequ

发布时间:2020-12-14 02:52:01 所属栏目:Windows 来源:网络整理
导读:我有一个生产应用程序通过HttpWebRequest进行两次调用.第一个调用设置会话并接收cookie以维持会话,第二个调用是来自api的数据.回复是httponly.我在两个调用之间使用共享CookieContainer,但第二个调用总是失败.我将问题缩小到第二个请求中没有发送的cookie.我
我有一个生产应用程序通过HttpWebRequest进行两次调用.第一个调用设置会话并接收cookie以维持会话,第二个调用是来自api的数据.回复是httponly.我在两个调用之间使用共享CookieContainer,但第二个调用总是失败.我将问题缩小到第二个请求中没有发送的cookie.我已经使用网络监视器来监视流量,如果我在第二个请求中明确设置了cookie(参见下面的代码),则呼叫成功.有人对这个问题有任何想法吗?我需要弄清楚如何使用共享的CookieContainer.

private string URL_01 = "https:// [...]";
private string URL_02 = "https:// [...]";
private CookieContainer _cookieContainer = new CookieContainer();
private NetworkCredential nc = new NetworkCredential("username","password");

private void MainPage_Loaded(object sender,RoutedEventArgs e)
{
HttpWebRequest request = HttpWebRequest.CreateHttp(URL_01);
request.CookieContainer = _cookieContainer;
request.Credentials = nc;
request.UseDefaultCredentials = false;
request.BeginGetResponse(new AsyncCallback(HandleResponse),request);
}

public void HandleResponse(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;

if (request != null)
{
    using (WebResponse response = request.EndGetResponse(result))
    {
         using (StreamReader reader = new StreamReader(response.GetResponseStream()))
         {
             string data = reader.ReadToEnd();

             // gets returned data and deserializes it to an object
             SessionObject so = JsonConvert.DeserializeObject<SessionObject>(data);

             if (so.DeviceAPI.Session == "true")
             {
                // make a second call for the data
                HttpWebRequest requestData = HttpWebRequest.CreateHttp(URL_02);

                // when this is used,the call fails
                requestData.CookieContainer = _cookieContainer;

                // when this is used,the call works
                //requestData.Headers[HttpRequestHeader.Cookie] = "_key=value; _secret=value";

                requestData.Credentials = nc; 
                requestData.BeginGetResponse(new AsyncCallback(DataResponse),requestSongData);
                    }
                }
            }
        }
    }

    public void DataResponse(IAsyncResult DataResult)
    {
        HttpWebRequest requestData = DataResult.AsyncState as HttpWebRequest;

        if (requestData != null)
        {

            using (WebResponse dataResponse = requestData.EndGetResponse(DataResult))
            {
                using (StreamReader reader = new StreamReader(dataResponse.GetResponseStream()))
                {
                    string data = reader.ReadToEnd();
                    // do something with the data
                }
            }
        }
    }
}

}

解决方法

当域名上没有“www”时,这个问题是CookieContainer的一个已知问题. CookieContainer期待“www”并且不识别域的现有cookie.

解决方法是从响应标头中读取cookie并将其添加到任何其他请求中.

被认为是芒果的修复,但被推出了.

杰夫

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读