HttpHelper类使用

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 



using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.IO.Compression;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;


namespace DotNet.Utilities
{
    /// <summary>
    /// Http连接操作帮助类
    /// </summary>
    public class HttpHelper
    {
        #region 预定义方法或者变更
        //默认的编码
        private Encoding encoding = Encoding.Default;
        //Post数据编码
        private Encoding postencoding = Encoding.Default;
        //HttpWebRequest对象用来发起请求
        private HttpWebRequest request = null;
        //获取影响流的数据对象
        private HttpWebResponse response = null;
        /// <summary>
        /// 根据相传入的数据,得到相应页面数据
        /// </summary>
        /// <param name="item">参数类对象</param>
        /// <returns>返回HttpResult类型</returns>
        public HttpResult GetHtml(HttpItem item)
        {
            //返回参数
            HttpResult result = new HttpResult();
            try
            {
                //准备参数
                SetRequest(item);
            }
            catch (Exception ex)
            {
                result = new HttpResult();
                result.Cookie = string.Empty;
                result.Header = null;
                result.Html = ex.Message;
                result.StatusDescription = "配置参数时出错:" + ex.Message;
                return result;
            }
            try
            {
                #region 得到请求的response
                using (response = (HttpWebResponse)request.GetResponse())
                {
                    result.StatusCode = response.StatusCode;
                    result.StatusDescription = response.StatusDescription;
                    result.Header = response.Headers;
                    if (response.Cookies != null) result.CookieCollection = response.Cookies;
                    if (response.Headers["set-cookie"] != null) result.Cookie = response.Headers["set-cookie"];
                    MemoryStream _stream = new MemoryStream();
                    //GZIIP处理
                    if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
                    {
                        //开始读取流并设置编码方式
                        //new GZipStream(response.GetResponseStream(), CompressionMode.Decompress).CopyTo(_stream, 10240);
                        //.net4.0以下写法
                        _stream = GetMemoryStream(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));


                    }
                    else
                    {
                        //开始读取流并设置编码方式
                        //response.GetResponseStream().CopyTo(_stream, 10240);
                        //.net4.0以下写法
                        _stream = GetMemoryStream(response.GetResponseStream());
                    }
                    //获取Byte
                    byte[] ResponseByte = _stream.ToArray();
                    _stream.Close();
                    if (ResponseByte != null & ResponseByte.Length > 0)
                    {
                        //是否返回Byte类型数据
                        if (item.ResultType == ResultType.Byte) result.ResultByte = ResponseByte;
                        //从这里开始我们要无视编码了
                        if (encoding == null)
                        {
                            Match meta = Regex.Match(Encoding.Default.GetString(ResponseByte), "<meta([^<]*)charset=([^<]*)[\"']", RegexOptions.IgnoreCase);
                            string c = (meta.Groups.Count > 1) ? meta.Groups[2].Value.ToLower().Trim() : string.Empty;
                            if (c.Length > 2)
                            {
                                try
                                {
                                    if (c.IndexOf(" ") > 0) c = c.Substring(0, c.IndexOf(" "));
                                    encoding = Encoding.GetEncoding(c.Replace("\"", "").Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk").Trim());
                                }
                                catch
                                {
                                    if (string.IsNullOrEmpty(response.CharacterSet)) encoding = Encoding.UTF8;
                                    else encoding = Encoding.GetEncoding(response.CharacterSet);
                                }
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(response.CharacterSet)) encoding = Encoding.UTF8;
                                else encoding = Encoding.GetEncoding(response.CharacterSet);
                            }
                        }
                        //得到返回的HTML
                        result.Html = encoding.GetString(ResponseByte);
                    }
                    else

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android网络请求通常使用HttpHelper来进行,它是一个封装了网络请求的帮助HttpHelper使用HttpClient或OkHttpClient来实现网络请求功能。 HTTPHelper主要包括以下几个关键方法: 1. `GET`请求:发送一个GET请求并获取服务器返回的数据。可以设置请求头、请求参数和回调函数,用于处理服务器返回的数据。 2. `POST`请求:发送一个POST请求并获取服务器返回的数据。可以设置请求头、请求参数和回调函数,用于处理服务器返回的数据。 3. `上传文件`:发送一个文件上传请求,并获取服务器返回的数据。可以设置请求头、请求参数、上传文件路径和回调函数,用于处理服务器返回的数据。 4. `下载文件`:发送一个文件下载请求,并将文件保存到本地。可以设置请求头、请求参数、下载文件保存路径和回调函数,用于处理下载过程中的进度和完成后的反馈。 5. `取消请求`:取消当前正在进行的网络请求。 在使用HttpHelper进行网络请求时,我们需要注意以下几点: 1. 需要在AndroidManifest.xml文件中添加网络权限,确保应用程序可以进行网络请求。 2. 在进行网络请求时,尽量在子线程中执行,可以使用AsyncTask或Thread来实现。 3. 在进行网络请求时,要注意处理网络请求过程中可能出现的异常情况,例如网络连接失败、超时等,可以通过回调函数或异常处理来处理这些异常。 总之,使用Android网络请求的HttpHelper可以方便地发送GET、POST请求,上传和下载文件,并提供了回调函数来处理服务器返回的数据,使得网络请求更加方便和灵活。 ### 回答2: Android网络HttpHelper是一种帮助开发者在Android应用中进行网络请求的工具。它提供了一系列的方法和功能,简化了开发者在与服务器进行通信时的操作。 HttpHelper主要有以下几个特点和功能: 1. 封装了底层的HttpURLConnection或HttpClient等网络请求框架,隐藏了其复杂的细节。开发者只需要调用HttpHelper提供的方法,就可以轻松地发送HTTP请求。 2. 支持GET、POST等常用的HTTP请求方法,并且可以设置请求头、请求参数、超时时间等。 3. 支持异步请求,避免网络请求阻塞主线程,提高用户体验。开发者可以通过回调函数或RxJava等方式获取网络请求的结果。 4. 支持文件上传和下载。开发者可以通过HttpHelper上传文件到服务器或从服务器下载文件。 5. 提供了错误处理机制,可以捕获网络请求过程中可能发生的异常,并提供相应的处理方法。 6. 支持网络请求的缓存机制,可以缓存请求的结果,减少重复的网络请求,节省用户流量。 总之,Android网络HttpHelper是一个方便、实用的工具,使得开发者可以更加简单、高效地进行网络请求。无论是发送简单的GET请求还是上传大文件,HttpHelper都可以提供相应的方法和功能,帮助开发者轻松解决与服务器通信的问题。 ### 回答3: Android网络工具是指用来帮助开发人员通过HTTP协议在Android应用中进行网络请求的。在Android开发中,我们经常需要通过网络请求获取数据或者与服务器进行交互。Android系统本身提供了HttpURLConnection来实现网络请求,但是使用起来较为繁琐,同时不支持一些常用的功能,比如异步请求、请求队列管理等。因此,通常会使用第三方库来简化网络请求的过程,其中一个常用的库就是HttpHelperHttpHelper是一个轻量级的Android网络请求框架,它封装了HttpURLConnection,提供了一系列的API来进行网络请求。使用HttpHelper可以简化网络请求的流程,同时支持异步请求、自动解析JSON/XML数据、请求队列管理等常用功能。开发人员只需要定义请求的URL、方法(GET/POST)、请求参数等,就可以使用HttpHelper发送网络请求,并通过回调函数处理请求的结果。 HttpHelper使用方法如下: 1. 在项目的build.gradle文件中添加HttpHelper的依赖: ``` implementation 'com.android.volley:volley:1.1.1' ``` 2. 创建一个HttpHelper的实例: ``` HttpHelper httpHelper = new HttpHelper(context); ``` 3. 定义一个网络请求: ``` Request request = new RequestBuilder() .setMethod(Request.Method.GET) .setUrl("http://www.example.com/api/getData") .addParam("param1", "value1") .addParam("param2", "value2") .build(); ``` 4. 发送网络请求: ``` httpHelper.sendRequest(request, new HttpCallback() { @Override public void onSuccess(Response response) { // 处理请求成功的逻辑 } @Override public void onFailure(Response response) { // 处理请求失败的逻辑 } }); ``` 通过HttpHelper,开发人员可以更方便地进行网络请求,减少了大量的重复代码,提高了开发效率。同时,HttpHelper还提供了请求队列管理的功能,可以同时发送多个网络请求,并按照发送顺序进行处理。这样就避免了因为网络请求过多造成的阻塞和卡顿的情况。总之,Android网络工具是开发Android应用中不可或缺的一部分,它可以帮助我们更便捷地进行网络请求,实现与服务器的数据交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值