private static async Task <IHttpContent> GetCompressedContent(IHttpContent originalContent) { var ms = new System.IO.MemoryStream(); try { await CompressOriginalContentStream(originalContent, ms).ConfigureAwait(false); ms.Seek(0, System.IO.SeekOrigin.Begin); var compressedContent = new Windows.Web.Http.HttpStreamContent(ms.AsInputStream()); originalContent.CopyHeadersTo(compressedContent); compressedContent.Headers.ContentEncoding.Clear(); compressedContent.Headers.ContentEncoding.Add(new Windows.Web.Http.Headers.HttpContentCodingHeaderValue("gzip")); compressedContent.Headers.ContentLength = (ulong)ms.Length; originalContent.Dispose(); return(compressedContent); } catch { ms?.Dispose(); throw; } }
/// <summary> /// 销毁请求正文缓冲区(不应直接调用) /// </summary> private void DisposeContent() { if (httpContent != null) { httpContent.Dispose(); httpContent = null; } }
/// <summary> /// Disposes this instance and all internal resources. /// </summary> /// <param name="isDisposing">True if this method is being called explicitly from user code, otherwise false if it being called from the finalizer by the GC.</param> protected virtual void Dispose(bool isDisposing) { if (isDisposing) { if (originalContent != null) { originalContent?.Dispose(); originalContent = null; bufferedData = null; } } }
private static async Task <BitmapImage> GetMainSubStep_CookielessGetPic(string picUrl) { Uri myUri = new Uri(picUrl); HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, myUri); req.Headers.Host = new HostName(myUri.Host); req.Headers.Cookie.Clear(); HttpResponseMessage response = await client.SendRequestAsync(req); if (response == null) { return(null); } //HttpResponseMessage response if (response.StatusCode != HttpStatusCode.Ok) { return(null); } IHttpContent icont = response.Content; IBuffer buffer = await icont.ReadAsBufferAsync(); IRandomAccessStream irStream = new InMemoryRandomAccessStream(); BitmapImage img = new BitmapImage(); await irStream.WriteAsync(buffer); irStream.Seek(0); await img.SetSourceAsync(irStream); irStream.Dispose(); icont.Dispose(); response.Dispose(); req.Dispose(); return(img); }
//prepared private public static async Task <string> CookiedGetUrl(string url, string referrer) { HttpResponseMessage response = null; try { HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); req.Headers.Referer = new Uri(referrer); response = await client.SendRequestAsync(req); req.Dispose(); } catch (COMException e) { if ((uint)e.HResult == 0x80072f76) { await ShowMessageDialog("可能是被验证码阻挡。", "错误代码:" + String.Format("{0:x8}", e.HResult) + "\n错误类型:" + e.GetType() + "\n错误信息:" + e.Message + "\n" + "如果是验证码问题,请不要立即点确定。请先打开浏览器,输入验证码。"); await ShowMessageDialog("提示", "如果已经输入验证码,可以确认继续;\n如果发现Cookie已失效,继续并稍后以重新设置Cookie"); } try { HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); req.Headers.Referer = new Uri(referrer); response = await client.SendRequestAsync(req); req.Dispose(); } catch (COMException e2) { if ((uint)e2.HResult == 0x80072f76) { await ShowMessageDialog("错误未解决。", "错误类型:" + e2.GetType() + "\n错误信息:" + e2.Message + "\n持续网络故障。为避免故障扩大,程序将结束。可检查网络/jingyan.baidu.com,稍后再启动。"); Application.Current.Exit(); } if ((uint)e2.HResult == 0x80072efd) { await ShowMessageDialog("错误未解决。80072efd,系统网络故障", "错误类型:" + e2.GetType() + "\n错误信息:" + e2.Message + "\n请百度80072efd寻找解决办法。该故障和系统网络设置有关。可能是被国产安全软件乱优化造成。\n持续网络故障。为避免故障扩大,程序将结束。可检查网络,稍后再启动。"); Application.Current.Exit(); } client.Dispose(); await ShowMessageDialog("未知故障。可能是网络问题", "错误类型:" + e2.GetType() + "\n错误信息:" + e2.Message); throw new COMException(e2.Message); } } if (response == null) { return("RESPONSE NULL"); } if (response.StatusCode != HttpStatusCode.Ok) { return(response.StatusCode.ToString()); } IHttpContent icont = response.Content; IInputStream istream = await icont.ReadAsInputStreamAsync(); StreamReader reader = new StreamReader(istream.AsStreamForRead(), Encoding.UTF8); string content = reader.ReadToEnd(); reader.Dispose(); istream.Dispose(); icont.Dispose(); response.Dispose(); return(content); }