• 并发请求工具


    使用C#基于.netframework4.6开发的并发请求工具

    可以自定义Header,支持cookie。

    支持GET/POST。

    核心的HttpHelper代码:

    public class HttpHelper
        {
            static public async Task Post(string url, Dictionary<string, string> headers, string body, DecompressionMethods decompress = DecompressionMethods.GZip, Action<string, int> callback = null, int index = 0)
            {
                try
                {
                    var header = GetObj(headers);
    
                    var handler = new HttpClientHandler() { UseCookies = false, AutomaticDecompression = decompress };
                    HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, url)
                    {
                        Content = new StringContent(body, Encoding.UTF8, header.ContentType)
                    };
                    SetHead(req.Headers, headers);
                    HttpClient client = new HttpClient(handler);
                    if (header.UserAgent != null)
                        client.DefaultRequestHeaders.Add("User-Agent", header.UserAgent);
                    if (header.Referer != null)
                        client.DefaultRequestHeaders.Add("Referer", header.Referer);
                    if (header.Origin != null)
                        client.DefaultRequestHeaders.Add("Origin", header.Origin);
                    if (header.AcceptLanguage != null)
                        client.DefaultRequestHeaders.Add("Accept-Language", header.AcceptLanguage);
                    if (header.Connection != null)
                        client.DefaultRequestHeaders.Connection.Add(header.Connection);
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(header.Accept));
    
                    var res = await client.SendAsync(req);
                    var str = await res.Content.ReadAsStringAsync();
    
                    if (callback != null)
                        callback(str, index);
                }
                catch (Exception ex)
                {
                    if (callback != null)
                        callback(ex.Message, index);
                }
            }
    
            static public async Task Get(string url, Dictionary<string, string> headers, DecompressionMethods decompress = DecompressionMethods.GZip, Action<string, int> callback = null, int index = 0)
            {
                try
                {
                    var header = GetObj(headers);
                    var handler = new HttpClientHandler() { UseCookies = false, AutomaticDecompression = decompress };
                    HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, url);
                    SetHead(req.Headers, headers);
                    HttpClient client = new HttpClient(handler);
                    client.DefaultRequestHeaders.Add("User-Agent", header.UserAgent);
                    var res = await client.SendAsync(req);
                    var str = await res.Content.ReadAsStringAsync();
    
                    if (callback != null)
                        callback(str, index);
                }
                catch (Exception ex)
                {
                    if (callback != null)
                        callback(ex.Message, index);
                }
            }
    
            private static void SetHead(HttpRequestHeaders headers, Dictionary<string, string> dics)
            {
                foreach (KeyValuePair<string, string> item in dics)
                {
                    if (item.Key == "Content-Type") continue;
                    if (item.Key == "Referer") continue;
                    if (item.Key == "Content-Length") continue;
                    if (item.Key == "Accept") continue;
                    if (item.Key == "Connection") continue;
                    if (item.Key == "Host") continue;
    
                    headers.Add(item.Key, item.Value);
                }
            }
    
            private static HeaderObj GetObj(Dictionary<string, string> headers)
            {
                HeaderObj obj = new HeaderObj();
                if (headers.ContainsKey("Content-Type"))
                {
                    obj.ContentType = headers["Content-Type"];
                }
                if (headers.ContainsKey("Referer"))
                {
                    obj.Referer = headers["Referer"];
                }
                if (headers.ContainsKey("Connection"))
                {
                    obj.Connection = headers["Connection"];
                }
                if (headers.ContainsKey("Accept"))
                {
                    obj.Accept = headers["Accept"];
                }
                if (headers.ContainsKey("User-Agent"))
                {
                    obj.UserAgent = headers["User-Agent"];
                }
                if (headers.ContainsKey("Origin"))
                {
                    obj.Origin = headers["Origin"];
                }
                if (headers.ContainsKey("Accept-Language"))
                {
                    obj.AcceptLanguage = headers["Accept-Language"];
                }
                return obj;
            }
        }
    
        class HeaderObj
        {
            public string ContentType { get; set; } = "application/x-www-form-urlencoded";
            public string UserAgent { get; set; } = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Mobile Safari/537.36";
            public string Referer { get; set; }
            public string Connection { get; set; }
            public string Origin { get; set; }
            public string AcceptLanguage { get; set; }
            public string Accept { get; set; }
        }



    截图如下:

    image.png

    源码:http_request_tool

  • 相关阅读:
    HDU_1242_Rescue
    HDU_1175_连连看
    HDU_1072_Nightmare
    HDU_2544_最短路
    POJ_2195_Going Home
    POJ_3565_Ants
    KM算法(Kuhn-Munkres)
    POJ_2536_Gopher II
    ODATA 云驱动 http://www.cdata.com/cloud/
    Wijmo 5 与Breeze 的组合,及与METRONIC 的集成
  • 原文地址:https://www.cnblogs.com/wugang/p/14232344.html
Copyright © 2020-2023  润新知