HttpHelper

using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

public class HttpHelper
{

    public string HttpPost(string Url, string postDataStr, ref CookieContainer cookie)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        if (cookie.Count == 0)
        {
            request.CookieContainer = new CookieContainer();
            cookie = request.CookieContainer;
        }
        else
        {
            request.CookieContainer = cookie;
        }

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postDataStr.Length;
        Stream myRequestStream = request.GetRequestStream();
        StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
        myStreamWriter.Write(postDataStr);
        myStreamWriter.Close();

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream myResponseStream = response.GetResponseStream();
        StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
        string retString = myStreamReader.ReadToEnd();
        myStreamReader.Close();
        myResponseStream.Close();

        return retString;
    }

    public string HttpGet(string Url, ref CookieContainer cookie, string encodingString = "utf-8")
    {
        int counter = 0;
    rept:
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        request.Timeout = 100000;
        if (cookie == null || cookie.Count == 0)
        {
            request.CookieContainer = new CookieContainer();
            cookie = request.CookieContainer;
        }
        else
        {
            request.CookieContainer = cookie;
        }
        request.Method = "GET";
        string retString = string.Empty;
        //request.ContentType = "text/html;charset=UTF-8";
        //基础连接已经关闭: 连接被意外关闭。
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
        request.AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate;!Very Important.!!!
        request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9";//也非常重要
        request.Method = "GET";
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encodingString));
            retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
        }
        catch (Exception ex)
        {
            if (counter <= 10)
            {
                counter++;
                string msg = $"网络返回错误,正在重试 第{counter}次";
                goto rept;
            }
            else
            {

            }

        }

        return retString;
    }

    public string HttpGet(string Url, string referUrl, ref CookieContainer cookie, string encodingString = "utf-8")
    {
        int counter = 0;
    rept:
        string result = string.Empty;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        if (cookie == null || cookie.Count == 0)
        {
            // System.Windows.Forms.MessageBox.Show("先登陆再采集");

            //request.CookieContainer = new CookieContainer();
            //cookie = request.CookieContainer;
        }
        else
        {
            request.CookieContainer = cookie;
        }
        //设置不建立持久性连接连接
        request.KeepAlive = false;
        //  request.ProtocolVersion = HttpVersion.Version10; //http的版本有2个,一个是1.0,一个是1.1 具体更具实际情况测试替换

        //基础连接已经关闭: 连接被意外关闭。
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
        request.AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate;!Very Important.!!!
        request.Referer = referUrl;//防盗
        request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9";//也非常重要
        request.Method = "GET";


        //Accept-Language: zh-CN,zh;q=0.9
        //       request.ContentType = "text/html;charset=UTF-8";
        Stream myResponseStream = null;
        StreamReader myStreamReader = null;
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            myResponseStream = response.GetResponseStream();
            myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encodingString));
            result = myStreamReader.ReadToEnd();

        }
        catch (Exception)
        {
            if (counter <= 10)
            {
                counter++;
                string msg = $"网络返回错误,正在重试 第{counter}次";
                goto rept;

            }
        }
        finally
        {
            if (myStreamReader != null)
                myStreamReader.Dispose();
            if (myResponseStream != null)
                myResponseStream.Dispose();
        }

        return result;
    }

    public string HttpGet(string Url, string referUrl, string encodingString)
    {

        int counter = 0;
    rept:
        string result = string.Empty;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        //基础连接已经关闭: 连接被意外关闭。
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400";
        request.AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate;!Very Important.!!!
        request.Referer = referUrl;//防盗
        request.AllowAutoRedirect = true;
        request.Method = "GET";
        Stream myResponseStream = null;
        StreamReader myStreamReader = null;
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            myResponseStream = response.GetResponseStream();
            myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encodingString));
            result = myStreamReader.ReadToEnd();

        }
        catch (Exception)
        {
            if (counter <= 10)
            {
                counter++;
                string msg = $"网络返回错误,正在重试 第{counter}次";
                goto rept;
            }
        }
        finally
        {
            if (myStreamReader != null)
                myStreamReader.Dispose();
            if (myResponseStream != null)
                myResponseStream.Dispose();
        }

        return result;
    }

    public string HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc)
    {
        string result = string.Empty;
        string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
        byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
        wr.ContentType = "multipart/form-data; boundary=" + boundary;
        wr.Method = "POST";
        wr.KeepAlive = true;
        wr.Credentials = System.Net.CredentialCache.DefaultCredentials;

        Stream rs = wr.GetRequestStream();

        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
        foreach (string key in nvc.Keys)
        {
            rs.Write(boundarybytes, 0, boundarybytes.Length);
            string formitem = string.Format(formdataTemplate, key, nvc[key]);
            byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
            rs.Write(formitembytes, 0, formitembytes.Length);
        }
        rs.Write(boundarybytes, 0, boundarybytes.Length);

        string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
        string header = string.Format(headerTemplate, paramName, file, contentType);
        byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
        rs.Write(headerbytes, 0, headerbytes.Length);

        FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            rs.Write(buffer, 0, bytesRead);
        }
        fileStream.Close();

        byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
        rs.Write(trailer, 0, trailer.Length);
        rs.Close();

        WebResponse wresp = null;
        try
        {
            wresp = wr.GetResponse();
            Stream stream2 = wresp.GetResponseStream();
            StreamReader reader2 = new StreamReader(stream2);

            result = reader2.ReadToEnd();
        }
        catch (Exception ex)
        {
            if (wresp != null)
            {
                wresp.Close();
                wresp = null;
            }
        }
        finally
        {
            wr = null;
        }

        return result;
    }

    /// <summary>
    /// Http方式下载文件
    /// </summary>
    /// <param name="url">http地址</param>
    /// <param name="localfile">本地文件</param>
    /// <returns></returns>
    public bool HttpDownload(string url, string referUrl, string postDataStr, ref CookieContainer cookie, out string filePath)
    {
        bool flag = false;
        long startPosition = 0; // 上次下载的文件起始位置
        FileStream fileStream = null; // 写入本地文件流对象

        if (!Directory.Exists(Path.Combine(Environment.CurrentDirectory, "DownFiles")))
        {
            Directory.CreateDirectory(Path.Combine(Environment.CurrentDirectory, "DownFiles"));
        }

        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
            if (cookie.Count == 0)
            {
                request.CookieContainer = new CookieContainer();
                cookie = request.CookieContainer;
            }
            else
            {
                request.CookieContainer = cookie;
            }
            // Set credentials to use for this request.
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Referer = referUrl;
            request.ContentLength = postDataStr.Length;

            if (startPosition > 0)
                request.AddRange((int)startPosition);// 设置Range值,定义远程文件读取位置

            //向请求中写入PostStr
            Stream myRequestStream = request.GetRequestStream();
            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
            myStreamWriter.Write(postDataStr);
            myStreamWriter.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();// 向服务器请求,获得服务器的回应数据流
            Stream myResponseStream = response.GetResponseStream();

            var headers = response.Headers;

            //创建本地文件写入流
            filePath = Regex.Match(Uri.UnescapeDataString(headers["Content-Disposition"]), "filename=(.+)").Groups[1].Value;

            string fileFullPath = Path.Combine(Environment.CurrentDirectory, "DownFiles", filePath);
            fileStream = new FileStream(fileFullPath, FileMode.Create);
            byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
            int contentSize = myResponseStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次

            while (contentSize > 0)// 如果读取长度大于零则继续读
            {
                fileStream.Write(btArray, 0, contentSize);// 写入本地文件
                contentSize = myResponseStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取
            }

            //关闭流
            fileStream.Close();
            myRequestStream.Close();
            flag = true;        //返回true下载成功
        }
        catch (Exception ex)
        {
            filePath = "";
            fileStream.Close();
            flag = false;       //返回false下载失败
        }

        return flag;
    }

    /// <summary>
    /// 获得13位时间戳
    /// </summary>
    /// <returns></returns>
    public static long GetLongTime()
    {
        System.DateTime time = DateTime.Now;
        System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
        long t = (time.Ticks - startTime.Ticks) / 10000;   //除10000调整为13位      
        return t;
    }

    /// <summary>
    /// 从网络上获得北京时间
    /// </summary>
    /// <returns></returns>
    public static DateTime GetNetChineseDateTime()
    {
        //document.write('2019年6月25日')
        DateTime res = DateTime.MinValue;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.time.ac.cn/stime.asp");
        request.Timeout = 100000;
       
        request.Method = "GET";
        string retString = string.Empty;
        //request.ContentType = "text/html;charset=UTF-8";
        //基础连接已经关闭: 连接被意外关闭。
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
        request.AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate;!Very Important.!!!
        request.Headers["Accept-Language"] = "zh-CN,zh;q=0.9";//也非常重要
        request.Method = "GET";
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
            retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }


        var pattern = "document.write\\(\'(\\d{4})年(\\d{1,2})月(\\d{1,2})日";
        var options = RegexOptions.None;
        var regex = new Regex(pattern, options, TimeSpan.FromMilliseconds(1000));

        var groupNames = regex.GetGroupNames();

        var match = regex.Match(retString);

       int year=int.Parse( match.Groups[1].Value);
       int month=int.Parse( match.Groups[2].Value);
        int day =int.Parse( match.Groups[3].Value);
        return new DateTime(year, month, day);
    }



}  

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值