C#工具类(三):C#通过Http请求获取字符串结果和下载文件

作者:陆金龙    发表时间:2015-05-12 01:41   


C#实现通过HttpPost请求,返回响应结果的字符串格式;

C#实现通过HttpGet请求,返回响应结果的字符串格式。

C#实现通过HttpGet请求,完成文件下载。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;

namespace Kinglong.App.Tools
{
    public class HttpRequestHelper
    {
        /// 
        /// Send Http request by post method 
        /// 
        ///url of ServerPage
        ///format:parma1=value1¶m2=value2&parm3=value3
        /// string format of response
        public static string HttpPostRequest(string url, string instrParam)
        {
            string res = string.Empty;

            //byte[] dataArray = Encoding.Default.GetBytes(strParam);
            byte[] dataArray = Encoding.UTF8.GetBytes(strParam);//处理中文乱码
            try
            {
                //Create Request
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                request.Method = "POST";
                request.ContentLength = dataArray.Length;
                request.ContentType = "application/x-www-form-urlencoded";

                //Create InputStream to Send Data
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(dataArray, 0, dataArray.Length);
                requestStream.Close();

                //Create Response
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                //Create OutputStream to Get Data
                Stream responseStream = response.GetResponseStream();
                StreamReader stremReader = new StreamReader(responseStream, Encoding.UTF8);
                res = stremReader.ReadToEnd();
                responseStream.Close();
                stremReader.Close();
            }
            catch (Exception)
            {
                res = null;
            }

            return res;
        }


        /// 
        /// Send Http request by get method
        /// 
        ///
        /// 
        public static string HttpGetRequest(string url)
        {
            string result = string.Empty;

            try
            {
                //Create Request
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

                //Create Response
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                //Create OutputStream to Get Data
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
                    result = streamReader.ReadToEnd();
                    responseStream.Close();
                    streamReader.Close();
                }
            }
            catch (Exception ex)
            {
                result = "";
            }
            return result;
        }

        /// 
        /// Download File by Http get request 
        /// 
        ///the url of Download page
        ///the path of File to save
        /// 
        public static void HttpDownloadFile(string url, string savePath)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.UserAgent = @" Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36
	";  //如果不设置用户代理,可能出现文件下载不成功的情况
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            if (!response.ContentType.ToLower().StartsWith("text/"))
            { 
                byte[] buffer = new byte[1024];
                Stream outStream = System.IO.File.Create(savePath);
                Stream inStream = response.GetResponseStream();
                int count;
                do
                {
                    count = inStream.Read(buffer, 0, buffer.Length);
                    if (count > 0)
                        outStream.Write(buffer, 0, count);
                }
                while (count > 0);
                outStream.Close();
                inStream.Close();
            }
        }
    }
}