C#模拟http请求

private string PostWebRequest<T>(string postUrl, T dataModel)
{
    string rspString = string.Empty;
    string jsonString = this.ConvertToPostString(dataModel);
    try
    {
        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((sender, certificate, chain, errors) => { return true; });
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

        HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
        request.ProtocolVersion = HttpVersion.Version11;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        Encoding charset = Encoding.UTF8;
        byte[] data = charset.GetBytes(jsonString.ToString());
        using (Stream stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        // 解压缩基础流
        using (Stream s = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress))
        {
            StreamReader reader = new StreamReader(s, charset);
            rspString = reader.ReadToEnd();
        }

        return rspString;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

private string Post<T>(string extendUrl, T dataModel)
{
    string rspString = string.Empty;
    string jsonString = this.ConvertToPostString(dataModel);
    try
    {
        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((sender, certificate, chain, errors) => { return true; });
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

        HttpWebRequest request = WebRequest.Create(extendUrl) as HttpWebRequest;
        request.ProtocolVersion = HttpVersion.Version11;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
        Encoding charset = Encoding.UTF8;
        byte[] data = charset.GetBytes(jsonString.ToString());
        using (Stream stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        using (Stream s = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(s, charset);
            rspString = reader.ReadToEnd();
        }

        return rspString;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

private string Get<T>(string url, T dataModel)
{
    string rspString = string.Empty;
    try
    {
        url = url + "?" + this.ConvertToPostString(dataModel);
        HttpWebRequest hwRequest;
        HttpWebResponse hwResponse;
        if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
        {
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((sender, certificate, chain, errors) => { return true; });
            hwRequest = WebRequest.Create(url) as HttpWebRequest;
            hwRequest.ProtocolVersion = HttpVersion.Version11;
        }
        else
        {
            hwRequest = WebRequest.Create(url) as HttpWebRequest;
        }

        hwRequest.Timeout = 20 * 1000;
        hwRequest.Method = "GET";
        hwRequest.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
        hwResponse = (HttpWebResponse)hwRequest.GetResponse();
        StreamReader srReader = new StreamReader(hwResponse.GetResponseStream(), Encoding.UTF8);
        rspString = srReader.ReadToEnd();
        srReader.Close();
        hwResponse.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return rspString;
}

private string Post<T>(string extendUrl, T dataModel)
            where T : new()
{
    List<KeyValuePair<string, string>> paramList = this.ConvertToKeyValuePairByString(dataModel);
    string rspString = string.Empty;
    try
    {
        HttpClient client = new HttpClient();

        client.DefaultRequestHeaders.Clear();
        client.DefaultRequestHeaders.Add("ContentType", "application/json;odata=verbose");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        HttpResponseMessage rspMessage = client.PostAsync(extendUrl, new FormUrlEncodedContent(paramList)).Result;
        rspString = rspMessage.Content.ReadAsStringAsync().Result;

        //释放资源
        rspMessage.Dispose();
        client.Dispose();
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return rspString;
}

private List<KeyValuePair<string, string>> ConvertToKeyValuePairByString(object model)
{
    var result = new List<KeyValuePair<string, string>>();

    foreach (var property in model.GetType().GetProperties())
    {
        var key = property.Name;
        var value = property.GetValue(model);

        if (value != null)
        {
            result.Add(new KeyValuePair<string, string>(key, value.ToString()));
        }
    }

    return result;
}

private string ConvertToPostString(object obj)
{
    var type = obj.GetType();
    var lst = new List<string>();
    foreach (var item in type.GetProperties())
    {
        var key = item.Name;
        var value = item.GetValue(obj);
        if (value != null)
        {
            lst.Add(string.Format("{0}={1}", key, value.ToString()));
        }
    }

    return string.Join("&", lst);
}

private string CompleteUrl(string baseUrl, string method)
{
    return string.Format(baseUrl, method);
}

猜你喜欢

转载自blog.csdn.net/qq_32109957/article/details/103312360
今日推荐