Exemple #1
0
 /// <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);
 }
Exemple #2
0
 /// <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));
         }
     }));
 }
Exemple #3
0
        /// <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));
        }
Exemple #4
0
        /// <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));
        }
Exemple #5
0
 /// <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);
 }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
 /// <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));
 }
Exemple #8
0
 /// <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));
 }
Exemple #9
0
        /// <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));
        }
Exemple #10
0
 /// <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 });
 }