zoukankan      html  css  js  c++  java
  • Http post请求

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

    namespace Elight.Infrastructure
    {
    public class HttpMethods
    {
    #region POST
    /// <summary>
    /// HTTP POST方式请求数据
    /// </summary>
    /// <param name="url">URL.</param>
    /// <param name="param">POST的数据</param>
    /// <returns></returns>
    public static string HttpPost(string url, string param = null)
    {
    HttpWebRequest request;

    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
    }
    else
    {
    request = WebRequest.Create(url) as HttpWebRequest;
    }

    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "*/*";
    request.Timeout = 15000;
    request.AllowAutoRedirect = false;

    StreamWriter requestStream = null;
    WebResponse response = null;
    string responseStr = null;

    try
    {
    requestStream = new StreamWriter(request.GetRequestStream());
    requestStream.Write(param);
    requestStream.Close();

    response = request.GetResponse();
    if (response != null)
    {
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    responseStr = reader.ReadToEnd();
    reader.Close();
    }
    }
    catch (Exception)
    {
    throw;
    }
    finally
    {
    request = null;
    requestStream = null;
    response = null;
    }

    return responseStr;
    }


    private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
    {
    return true; //总是接受
    }
    public static string BuildRequest(string strUrl, Dictionary<string, string> dicPara, string fileName)
    {
    string contentType = "image/jpeg";
    //待请求参数数组
    FileStream Pic = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    byte[] PicByte = new byte[Pic.Length];
    Pic.Read(PicByte, 0, PicByte.Length);
    int lengthFile = PicByte.Length;

    //构造请求地址

    //设置HttpWebRequest基本信息
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);
    //设置请求方式:get、post
    request.Method = "POST";
    //设置boundaryValue
    string boundaryValue = DateTime.Now.Ticks.ToString("x");
    string boundary = "--" + boundaryValue;
    request.ContentType = " multipart/form-data; boundary=" + boundaryValue;
    //设置KeepAlive
    request.KeepAlive = true;
    //设置请求数据,拼接成字符串
    StringBuilder sbHtml = new StringBuilder();
    foreach (KeyValuePair<string, string> key in dicPara)
    {
    sbHtml.Append(boundary + " Content-Disposition: form-data; name="" + key.Key + "" " + key.Value + " ");
    }
    sbHtml.Append(boundary + " Content-Disposition: form-data; name="pic"; filename="");
    sbHtml.Append(fileName);
    sbHtml.Append("" Content-Type: " + contentType + " ");
    string postHeader = sbHtml.ToString();
    //将请求数据字符串类型根据编码格式转换成字节流
    Encoding code = Encoding.GetEncoding("UTF-8");
    byte[] postHeaderBytes = code.GetBytes(postHeader);
    byte[] boundayBytes = Encoding.ASCII.GetBytes(" " + boundary + "-- ");
    //设置长度
    long length = postHeaderBytes.Length + lengthFile + boundayBytes.Length;
    request.ContentLength = length;

    //请求远程HTTP
    Stream requestStream = request.GetRequestStream();
    Stream myStream = null;
    try
    {
    //发送数据请求服务器
    requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
    requestStream.Write(PicByte, 0, lengthFile);
    requestStream.Write(boundayBytes, 0, boundayBytes.Length);
    HttpWebResponse HttpWResp = (HttpWebResponse)request.GetResponse();
    myStream = HttpWResp.GetResponseStream();
    }
    catch (WebException ex)
    {
    throw ex;
    }
    finally
    {
    if (requestStream != null)
    {
    requestStream.Close();
    }
    }

    //读取处理结果
    StreamReader reader = new StreamReader(myStream, code);
    StringBuilder responseData = new StringBuilder();

    String line;
    while ((line = reader.ReadLine()) != null)
    {
    responseData.Append(line);
    }
    myStream.Close();
    Pic.Close();

    return responseData.ToString();
    }
    #endregion

    #region Put
    /// <summary>
    /// HTTP Put方式请求数据.
    /// </summary>
    /// <param name="url">URL.</param>
    /// <returns></returns>
    public static string HttpPut(string url, string param = null)
    {
    HttpWebRequest request;

    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
    }
    else
    {
    request = WebRequest.Create(url) as HttpWebRequest;
    }
    request.Method = "PUT";
    request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "*/*";
    request.Timeout = 15000;
    request.AllowAutoRedirect = false;

    StreamWriter requestStream = null;
    WebResponse response = null;
    string responseStr = null;

    try
    {
    requestStream = new StreamWriter(request.GetRequestStream());
    requestStream.Write(param);
    requestStream.Close();

    response = request.GetResponse();
    if (response != null)
    {
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    responseStr = reader.ReadToEnd();
    reader.Close();
    }
    }
    catch (Exception)
    {
    throw;
    }
    finally
    {
    request = null;
    requestStream = null;
    response = null;
    }

    return responseStr;
    }
    #endregion

    #region Delete
    /// <summary>
    /// HTTP Delete方式请求数据.
    /// </summary>
    /// <param name="url">URL.</param>
    /// <returns></returns>
    public static string HttpDelete(string url, string param = null)
    {
    HttpWebRequest request;

    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
    }
    else
    {
    request = WebRequest.Create(url) as HttpWebRequest;
    }
    request.Method = "Delete";
    request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "*/*";
    request.Timeout = 15000;
    request.AllowAutoRedirect = false;

    StreamWriter requestStream = null;
    WebResponse response = null;
    string responseStr = null;

    try
    {
    requestStream = new StreamWriter(request.GetRequestStream());
    requestStream.Write(param);
    requestStream.Close();

    response = request.GetResponse();
    if (response != null)
    {
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    responseStr = reader.ReadToEnd();
    reader.Close();
    }
    }
    catch (Exception)
    {
    throw;
    }
    return responseStr;
    }
    #endregion

    #region Get
    /// <summary>
    /// HTTP GET方式请求数据.
    /// </summary>
    /// <param name="url">URL.</param>
    /// <returns></returns>
    public static string HttpGet(string url, Hashtable headht = null)
    {
    HttpWebRequest request;

    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
    }
    else
    {
    request = WebRequest.Create(url) as HttpWebRequest;
    }
    request.Method = "GET";
    //request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "*/*";
    request.Timeout = 15000;
    request.AllowAutoRedirect = false;
    WebResponse response = null;
    string responseStr = null;
    if (headht != null)
    {
    foreach (DictionaryEntry item in headht)
    {
    request.Headers.Add(item.Key.ToString(), item.Value.ToString());
    }
    }

    try
    {
    response = request.GetResponse();

    if (response != null)
    {
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    responseStr = reader.ReadToEnd();
    reader.Close();
    }
    }
    catch (Exception)
    {
    throw;
    }
    return responseStr;
    }
    public static string HttpGet(string url, Encoding encodeing, Hashtable headht = null)
    {
    HttpWebRequest request;

    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
    }
    else
    {
    request = WebRequest.Create(url) as HttpWebRequest;
    }
    request.Method = "GET";
    //request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "*/*";
    request.Timeout = 15000;
    request.AllowAutoRedirect = false;
    WebResponse response = null;
    string responseStr = null;
    if (headht != null)
    {
    foreach (DictionaryEntry item in headht)
    {
    request.Headers.Add(item.Key.ToString(), item.Value.ToString());
    }
    }

    try
    {
    response = request.GetResponse();

    if (response != null)
    {
    StreamReader reader = new StreamReader(response.GetResponseStream(), encodeing);
    responseStr = reader.ReadToEnd();
    reader.Close();
    }
    }
    catch (Exception)
    {
    throw;
    }
    return responseStr;
    }
    #endregion

    #region Post With Pic
    private string HttpPost(string url, IDictionary<object, object> param, string filePath)
    {
    string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
    byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes(" --" + boundary + " ");

    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 responseStr = null;

    string formdataTemplate = "Content-Disposition: form-data; name="{0}" {1}";
    foreach (string key in param.Keys)
    {
    rs.Write(boundarybytes, 0, boundarybytes.Length);
    string formitem = string.Format(formdataTemplate, key, param[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}" Content-Type: {2} ";
    string header = string.Format(headerTemplate, "pic", filePath, "text/plain");
    byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
    rs.Write(headerbytes, 0, headerbytes.Length);

    FileStream fileStream = new FileStream(filePath, 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(" --" + boundary + "-- ");
    rs.Write(trailer, 0, trailer.Length);
    rs.Close();

    WebResponse wresp = null;
    try
    {
    wresp = wr.GetResponse();
    Stream stream2 = wresp.GetResponseStream();
    StreamReader reader2 = new StreamReader(stream2);
    responseStr = reader2.ReadToEnd();
    }
    catch (Exception ex)
    {
    if (wresp != null)
    {
    wresp.Close();
    wresp = null;
    }
    throw ex;
    }
    return responseStr;
    }
    #endregion

    #region Post With Pic
    /// <summary>
    /// HTTP POST方式请求数据(带图片)
    /// </summary>
    /// <param name="url">URL</param>
    /// <param name="param">POST的数据</param>
    /// <param name="fileByte">图片</param>
    /// <returns></returns>
    public static string HttpPost(string url, IDictionary<object, object> param, byte[] fileByte)
    {
    string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
    byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes(" --" + boundary + " ");

    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 responseStr = null;

    string formdataTemplate = "Content-Disposition: form-data; name="{0}" {1}";
    foreach (string key in param.Keys)
    {
    rs.Write(boundarybytes, 0, boundarybytes.Length);
    string formitem = string.Format(formdataTemplate, key, param[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}" Content-Type: {2} ";
    string header = string.Format(headerTemplate, "pic", fileByte, "text/plain");//image/jpeg
    byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
    rs.Write(headerbytes, 0, headerbytes.Length);

    rs.Write(fileByte, 0, fileByte.Length);

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

    WebResponse wresp = null;
    try
    {
    wresp = wr.GetResponse();
    Stream stream2 = wresp.GetResponseStream();
    StreamReader reader2 = new StreamReader(stream2);
    responseStr = reader2.ReadToEnd();
    }
    catch (Exception ex)
    {
    if (wresp != null)
    {
    wresp.Close();
    wresp = null;
    }
    throw ex;
    }
    return responseStr;
    }
    #endregion

    #region HttpsClient
    /// <summary>
    /// 创建HttpClient
    /// </summary>
    /// <returns></returns>
    public static HttpClient CreateHttpClient(string url)
    {
    HttpClient httpclient;
    //如果是发送HTTPS请求
    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
    {
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
    httpclient = new HttpClient();
    }
    else
    {
    httpclient = new HttpClient();
    }
    return httpclient;
    }
    #endregion
    }
    }

  • 相关阅读:
    create joint
    delphi 使用parent让进度条上显示文字
    abSymMeshMEL.txt
    ini写配置信息
    CreateBindGroupNode.txt
    CreateaJointCurve.txt
    09 IKFKMatch.txt
    TIF_to_MAP.BAT
    ImportBVHv20.txt
    FormatDateTime 一段以时间为命令的代码
  • 原文地址:https://www.cnblogs.com/wugh8726254/p/12701375.html
Copyright © 2011-2022 走看看