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并将其添加到任何其他请求中. 被认为是芒果的修复,但被推出了. 杰夫 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- wireshark抓包
- Windows Powershell 对于布尔值的处理
- windows – SID的用户名?
- winapi – 何时(以及如何)布置Win32窗口的子项以响应调整大
- 在 Windows 上搭建基于Android Studio 3.2 的 Flutter 开发
- 如何使用Windows Server Task Scheduler在文件夹上的任何更
- 在Windows Phone 8 C#app中不调用静态字段初始值设定项
- windows – Flaky Connection中的大型文件复制工具
- windows-server-2008 – 按用户和登录类型过滤安全日志
- 2018-2019-2 20165330《网络对抗技术》Exp2 后门原理与实践
推荐文章
站长推荐
- Windows Phone 7通知/流行/祝酒词
- windows-mobile – Windows Mobile上的简易IPC?
- windows – 用于设计软件的远程访问服务器
- windows – 阻止应用程序访问网络,但单个IP地址除
- 将存储库从Windows迁移到Linux时出现格式错误的转
- 在Windows Phone 7上使用WCF的System.Unsupporte
- xamarin – 如何在不编译DLL的情况下在Android中
- Windows上简单的构建过程自动化
- 如何从windows 10 pro安装文件获取install.wim
- windows – 如何从显示设备名称获取HMONITOR句柄
热点阅读