/// <summary> /// 使用post方式发送一个异步http请求,并传入请求完成后调用的委托(使用request.BeginGetResponse(responseCallback, request)开始异步请求,request为此方法的第一个参数),之所以有这个重载方法是因为很多时候我们需要手动设置HTTP请求的标头 /// </summary> /// <param name="cRequest">一个HttpWebRequest,这个HttpWebRequest通常会根据不同的url地址来设置一些http标头用以骗过服务器</param> /// <param name="keyValues">需要发送到服务器的键值对</param> /// <param name="files">需要提交到服务器的文件列表</param> /// <param name="encoding">指定请求编码,如果为null则使用默认编码</param> /// <param name="callback">异步获取发送流的委托,在这个委托里写入要发送给服务器的内容</param> public static void AsyncPost(CHttpWebRequest cRequest, Dictionary <string, string> keyValues, List <HttpPostFile> files, Encoding encoding, ResponseCallback callback) { cRequest.Target.Method = "POST"; //异步POST需要使用BeginGetRequestStream才能实现异步效果 cRequest.Target.BeginGetRequestStream(delegate(IAsyncResult asyncResult) { CHttpWebRequest asyncCRequest = (CHttpWebRequest)asyncResult.AsyncState; WriteRequestData(asyncCRequest.Target, asyncCRequest.Target.EndGetRequestStream(asyncResult), keyValues, files, encoding); //在委托 AsyncGet 里关闭 request 的RequesStream,才会开始向服务器发送请求 asyncCRequest.Target.BeginGetResponse(InternalCallback, new object[] { cRequest, callback }); }, cRequest); }
/// <summary> /// 用异步保存资源的函数,将css,js,flash,图片等资源文件保存到本地 /// </summary> /// <param name="cRequest">一个CHttpWebRequest的实例</param> /// <param name="dirPath">本地文件夹完整路径,资源文件将保存在此文件夹</param> /// <param name="completed">一个委托实例,下载完成后调用(委托只有一个string参数(如果保存成功此参数为文件在本地的绝对路径,保存失败则为null),无返回值。)</param> /// <param name="fileName">文件名,如果为null或者String.Empty则自动获取(推荐设置设置为自动获取)</param> public static void SaveResourceAsync(CHttpWebRequest cRequest, string dirPath, Action <string> completed, string fileName) { AsyncGet(cRequest, new ResponseCallback(delegate(CHttpWebResponse res) { if (null == completed) { SaveFile(res, dirPath, fileName); } else { completed(SaveFile(res, dirPath, fileName)); } })); }
/// <summary> /// 传入一个CHttpWebRequest的实例,向服务器发送请求,获取其返回的HttpWebResponse实例,如果过程中出现错误,则返回null /// </summary> /// <param name="cRequest">一个CHttpWebRequest实例</param> /// <returns>返回一个请求后得到的HttpWebResponse实例</returns> public static CHttpWebResponse Get(CHttpWebRequest cRequest) { HttpWebResponse response = null; try { response = cRequest.Target.GetResponse() as HttpWebResponse; } catch (WebException wex) { cRequest.Target.Abort(); } return(new CHttpWebResponse(response)); }
/// <summary> /// 传入一个CHttpWebRequest实例,使用指定编码(若为null,则使用UTF-8)向服务器发送http请求,并返回一个HttpWebResponse(如果出现错误,则返回null) /// </summary> /// <param name="cRequest">一个HttpWebRequest,通常会设置一些标头用以欺骗服务器</param> /// <param name="keyValueList">需要发送到服务器的键值对</param> /// <param name="encoding">指定请求编码,如果为null则使用默认编码</param> /// <returns>返回一个请求后得到的HttpWebResponse实例</returns> public static CHttpWebResponse Post(CHttpWebRequest cRequest, Dictionary <string, string> keyValues, List <HttpPostFile> files, Encoding encoding) { HttpWebResponse response = null; try { //设置请求方式为post cRequest.Target.Method = "POST"; WriteRequestData(cRequest.Target, cRequest.Target.GetRequestStream(), keyValues, files, encoding); response = cRequest.Target.GetResponse() as HttpWebResponse; } catch (ProtocolViolationException ex) { cRequest.Target.Abort(); } catch (WebException ex) { cRequest.Target.Abort(); } return(new CHttpWebResponse(response)); }
/// <summary> /// 用异步保存资源的函数,自动获取文件名,将css,js,flash,图片等资源文件保存到本地 /// </summary> /// <param name="cRequest">一个CHttpWebRequest的实例</param> /// <param name="dirPath">本地文件夹完整路径,资源文件将保存在此文件夹</param> /// <param name="completed">一个委托实例,下载完成后调用(委托只有一个string参数(如果保存成功此参数为文件在本地的绝对路径,保存失败则为null),无返回值。)</param> public static void SaveResourceAsync(CHttpWebRequest cRequest, string dirPath, Action <string> completed) { SaveResourceAsync(cRequest, dirPath, completed, null); }
/// <summary> /// 使用异步保存资源的函数,将css,js,flash,图片等资源文件保存到本地 /// </summary> /// <param name="fileUrl">资源在公网上的url路径</param> /// <param name="dirPath">本地文件夹完整路径,资源文件将保存在此文件夹</param> /// <param name="completed">一个委托实例,下载完成后调用(委托只有一个string参数(如果保存成功此参数为文件在本地的绝对路径,保存失败则为null),无返回值。)</param> /// <param name="fileName">文件名,如果为null或者String.Empty则自动获取(推荐设置设置为自动获取)</param> public static void SaveResourceAsync(string fileUrl, string dirPath, Action <string> completed, string fileName) { CHttpWebRequest cRequest = CreateRequest(fileUrl); SaveResourceAsync(cRequest, dirPath, completed, fileName); }
/// <summary> /// 使用同步保存资源的函数,将css,js,flash,图片等资源文件保存到本地 /// </summary> /// <param name="request">一个CHttpWebRequest的实例</param> /// <param name="dirPath">本地文件夹完整路径,资源文件将保存在此文件夹</param> /// <param name="fileName">文件名,如果为null或者String.Empty则自动获取(推荐设置设置为自动获取)</param> /// <returns>如果保存成功,返回文件绝对路径,否则返回null</returns> public static string SaveResource(CHttpWebRequest request, string dirPath, string fileName) { return(SaveFile(Get(request), dirPath, fileName)); }
/// <summary> /// 使用同步保存资源的函数,自动获取文件名,将css,js,flash,图片等资源文件保存到本地 /// </summary> /// <param name="request">一个CHttpWebRequest的实例</param> /// <param name="dirPath">本地文件夹完整路径,资源文件将保存在此文件夹</param> /// <returns>如果保存成功,返回文件绝对路径,否则返回null</returns> public static string SaveResource(CHttpWebRequest request, string dirPath) { return(SaveFile(Get(request), dirPath, null)); }
/// <summary> /// 使用同步保存资源的函数,将css,js,flash,图片等资源文件保存到本地 /// </summary> /// <param name="fileUrl">资源在公网上的url路径</param> /// <param name="dirPath">本地文件夹完整路径,资源文件将保存在此文件夹</param> /// <param name="fileName">文件名,如果为null或者String.Empty则自动获取(推荐设置设置为自动获取)</param> /// <returns>如果保存成功,返回文件绝对路径,否则返回null</returns> public static string SaveResource(string fileUrl, string dirPath, string fileName) { CHttpWebRequest request = CreateRequest(fileUrl); return(SaveResource(request, dirPath, fileName)); }
/// <summary> /// 使用get方式发送一个异步http请求,并传入请求完成后调用的委托(使用request.BeginGetResponse(responseCallback, request)开始异步请求,request为此方法的第一个参数),之所以有这个重载方法是因为很多时候我们需要手动设置HTTP请求的标头 /// </summary> /// <param name="cRequest">一个HttpWebRequest,这个HttpWebRequest通常会根据不同的url地址来设置一些http标头用以骗过服务器</param> /// <param name="callback">请求完成后调用的委托</param> public static void AsyncGet(CHttpWebRequest cRequest, ResponseCallback callback) { cRequest.Target.BeginGetResponse(InternalCallback, new object[] { cRequest, callback }); }