C# 发送post、get请求(学习笔记)

c# 发送post、get请求

public class HttpUtils
{
    /// <summary>
    /// 执行HTTP GET请求。
    /// </summary>
    /// <param name="url">请求地址</param>
    /// <param name="parameters">请求参数</param>
    /// <returns>HTTP响应</returns>
    public static string DoGet(string url, IDictionary<string, string> parameters)
    {
        if (parameters != null && parameters.Count > 0)
        {
            if (url.Contains("?"))
            {
                url = url + "&" + BuildPostData(parameters);
            }
            else
            {
                url = url + "?" + BuildPostData(parameters);
            }
        }
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.ServicePoint.Expect100Continue = false;
        req.Method = "GET";
        req.KeepAlive = true;
        req.UserAgent = "Test";
        req.ContentType = "application/json"; //application/x-www-form-urlencoded;charset=utf-8
        HttpWebResponse rsp = null;
        try
        {
            rsp = (HttpWebResponse)req.GetResponse();
        }
        catch (WebException webEx)
        {
            if (webEx.Status == WebExceptionStatus.Timeout)
            {
                rsp = null;
            }
        }

        if (rsp != null)
        {
            if (rsp.CharacterSet != null)
            {
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                return GetResponseAsString(rsp, encoding);
            }
            else
            {
                return string.Empty;
            }
        }
        else
        {
            return string.Empty;
        }
    }
    /// <summary>
    /// 执行HTTP GET 请求
    /// </summary>
    /// <param name="url">请求地址</param>
    /// <param name="parameters">请求参数</param>
    /// <param name="proxyIP">代理IP</param>
    /// <param name="portNum">端口</param>
    /// <returns></returns>
    public static string DoGet(string url, IDictionary<string, string> parameters, string proxyIP, int portNum)
    {
        if (parameters != null && parameters.Count > 0)
        {
            if (url.Contains("?"))
            {
                url = url + "&" + BuildPostData(parameters);
            }
            else
            {
                url = url + "?" + BuildPostData(parameters);
            }
        }
        string beginProxy = proxyIP;
        int port = portNum;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        System.Net.WebProxy proxy = new WebProxy(beginProxy, port);
        req.Proxy = proxy;
        req.ServicePoint.Expect100Continue = false;
        req.Method = "GET";
        req.KeepAlive = true;
        req.UserAgent = "Test";
        req.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; 

        HttpWebResponse rsp = null;
        try
        {
            rsp = (HttpWebResponse)req.GetResponse();
        }
        catch (WebException webEx)
        {
            if (webEx.Status == WebExceptionStatus.Timeout)
            {
                rsp = null;
            }
        }

        if (rsp != null)
        {
            if (rsp.CharacterSet != null)
            {
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                return GetResponseAsString(rsp, encoding);
            }
            else
            {
                return string.Empty;
            }
        }
        else
        {
            return string.Empty;
        }
    }



    /// <summary>
    /// 把响应流转换为文本。
    /// </summary>
    /// <param name="rsp">响应流对象</param>
    /// <param name="encoding">编码方式</param>
    /// <returns>响应文本</returns>
    private static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
    {
        StringBuilder result = new StringBuilder();
        Stream stream = null;
        StreamReader reader = null;
        try
        {
            // 以字符流的方式读取HTTP响应
            stream = rsp.GetResponseStream();
            reader = new StreamReader(stream, encoding);

            // 每次读取不大于256个字符,并写入字符串
            char[] buffer = new char[256];
            int readBytes = 0;
            while ((readBytes = reader.Read(buffer, 0, buffer.Length)) > 0)
            {
                result.Append(buffer, 0, readBytes);
            }
        }
        catch (WebException webEx)
        {
            if (webEx.Status == WebExceptionStatus.Timeout)
            {
                result = new StringBuilder();
            }
        }
        finally
        {
            // 释放资源
            if (reader != null) reader.Close();
            if (stream != null) stream.Close();
            if (rsp != null) rsp.Close();
        }

        return result.ToString();
    }

    /// <summary>
    /// 组装普通文本请求参数。
    /// </summary>
    /// <param name="parameters">Key-Value形式请求参数字典。</param>
    /// <returns>URL编码后的请求数据。</returns>
    private static string BuildPostData(IDictionary<string, string> parameters)
    {
        StringBuilder postData = new StringBuilder();
        bool hasParam = false;

         IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
        while (dem.MoveNext())
        {
            string name = dem.Current.Key;
            string value = dem.Current.Value;
            // 忽略参数名或参数值为空的参数
            if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
            {
                if (hasParam)
                {
                    postData.Append("&");
                }

                postData.Append(name);
                postData.Append("=");
                postData.Append(Uri.EscapeDataString(value));
                hasParam = true;
            }
        }

        return postData.ToString();
    }


    /// <summary>
    /// 执行HTTP Post请求。
    /// </summary>
    /// <param name="url">请求地址</param>
    /// <param name="paramjsonStr">请求的参数的json字符串</param>
    /// <param name="proxyIP">代理IP</param>
    /// <param name="portNum">代理端口</param>
    /// <returns>HTTP响应</returns>
    public static string DoPost(string url, string paramjsonStr, string proxyIP, int portNum)
    {
        string beginProxy = proxyIP;
        int port = portNum;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        System.Net.WebProxy proxy = new WebProxy(beginProxy, port);
        req.Proxy = proxy;
        req.Method = "POST";
        req.ContentType = "application/json";
        byte[] bs = Encoding.UTF8.GetBytes(paramjsonStr);
        req.ContentLength = bs.Length;
        using (Stream reqStream = req.GetRequestStream())
        {
            reqStream.Write(bs, 0, bs.Length);
            reqStream.Close();
        }

        Encoding encoding = Encoding.UTF8;
        string responseData = String.Empty;
        using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
        {

            using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
            {

                responseData = reader.ReadToEnd().ToString();

            }

        }
        return responseData;
    }

    /// <summary>
    /// 执行HTTP Post请求;并带上Token身份票据
    /// </summary>
    /// <param name="url"></param>
    /// <param name="data"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    public static string HttpPost(string url, string data, string token)
    {
        HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);

        //字符串转换为字节码         
        byte[] bs = Encoding.UTF8.GetBytes(data);

        //参数类型,这里是json类型
        //还有别的类型如"application/x-www-form-urlencoded", 
        httpWebRequest.ServicePoint.Expect100Continue = false;
        httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=GBK";
        //参数数据长度
        httpWebRequest.ContentLength = bs.Length;
        //设置请求类型
        httpWebRequest.Method = "POST";
        httpWebRequest.KeepAlive = true;
        //设置超时时间
        httpWebRequest.Timeout = 20000;
        httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "Bearer "+ token + "");
        //将参数写入请求地址中
        httpWebRequest.GetRequestStream().Write(bs, 0, bs.Length);
        HttpWebResponse rsp = null;
        try
        {
            rsp = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (WebException webEx)
        {
            if (webEx.Status == WebExceptionStatus.Timeout)
            {
                rsp = null;
            }
            Log.CreateLogManager().Error("推送xml文件异常:"+ webEx);
        }

        if (rsp != null)
        {
            if (rsp.CharacterSet != null)
            {
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                return GetResponseAsString(rsp, encoding);
            }
            else
            {
                return string.Empty;
            }
        }
        else
        {
            return string.Empty;
        }
    }


    /// <summary>
    /// 执行HTTP Post请求
    /// </summary>
    /// <param name="url"></param>
    /// <param name="paramjsonStr">请求的参数的json字符串</param>
    /// <returns></returns>
    public static string DoPost(string url, string paramjsonStr)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        //req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "application/json-rpc";
        byte[] bs = Encoding.GetEncoding("GBK").GetBytes(paramjsonStr);
        req.ContentLength = bs.Length;
        using (Stream reqStream = req.GetRequestStream())
        {
            reqStream.Write(bs, 0, bs.Length);
            reqStream.Close();
        }
        Encoding encoding = Encoding.UTF8;
        string responseData = String.Empty;
        using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
        {
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
            {
                responseData = reader.ReadToEnd().ToString();
            }

        }
        return responseData;
    }
}

下载文件流

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(export.ResourceLocation);
            request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " "");
            //发送请求并获取相应回应数据
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            //创建本地文件写入流
            List<byte> btlst = new List<byte>();
            int b = responseStream.ReadByte();
            while (b > -1)
            {
                btlst.Add((byte)b);
                b = responseStream.ReadByte();
            }
            byte[] bts = btlst.ToArray();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值