zoukankan      html  css  js  c++  java
  • 并发请求工具

    使用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

  • 相关阅读:
    CompletableFuture(yet)
    模拟future
    一次使用jmap评估是否可以把类似session信息挂靠在某未知框架的某暴露对象上
    只读事务与普通读
    多重分表分库一般解决方案
    mat解决oom一般方法实践
    类加载器隔离朴实案例(二)logback
    在51系列中data,idata,xdata,pdata的区别
    linux 简单的DMA例程
    disable_irq()与disable_irq_nosync()区别
  • 原文地址:https://www.cnblogs.com/wugang/p/14232344.html
Copyright © 2011-2022 走看看