首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问: DotNetBrowser支持socks5认证吗?

问: DotNetBrowser支持socks5认证吗?
EN

Stack Overflow用户
提问于 2018-04-12 23:43:35
回答 2查看 175关注 0票数 0

使用此处提供的代码示例:https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000110051-configuring-proxy仅适用于HTTP(S)代理,而不适用于socks5。对袜子5也有同样的支持吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-16 15:40:22

DotNetBrowser是基于铬引擎的。不幸的是,Chromium不支持SOCKS 5身份验证,因此DotNetBrowser也不支持这种身份验证。

Chromium跟踪器中存在一个问题:https://bugs.chromium.org/p/chromium/issues/detail?id=256785

一旦我们切换到Chromium版本,其中有SOCKS 5身份验证支持,我们也将把这个实现添加到DotNetBrowser中。

作为解决办法,您可以尝试创建自己的“IProtocolHandler”接口实现,以便使用第三方库处理对所需代理服务器的请求。但是,请注意,请求不能并行处理,因此性能可能会大大降低。

下面的文章演示如何注册自定义协议处理程序:https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000134504-custom-protocol-handler

票数 1
EN

Stack Overflow用户

发布于 2018-04-16 23:36:35

根据尤金·雅库什的建议,我想出了如下结论:

代码语言:javascript
复制
    public class HttpsHandler : IProtocolHandler
{
    public string socksHost = string.Empty;
    public int socksPort = -100;
    public bool socksLogin = false;
    public string socksUsername = string.Empty;
    public string socksPassword = string.Empty;

    //This method should provide the response for the specified request
    private Chilkat.Http http;
    private Chilkat.HttpRequest httpRequest;
    private Chilkat.HttpResponse httpResponse;
    private Chilkat.Spider spider;
    public HttpsHandler()
    {
        this.http = new Chilkat.Http();
        this.spider = new Chilkat.Spider();
    }
    public IUrlResponse Handle(IUrlRequest request)
    {
        http.SocksHostname = socksHost;
        http.SocksPort = socksPort;
        http.SocksVersion = 5;
        if (socksLogin)
        {
            http.SocksUsername = socksUsername;
            http.SocksPassword = socksPassword;
        }
        httpRequest = new Chilkat.HttpRequest();
        httpRequest.HttpVerb = request.Method.ToUpper();
        Console.WriteLine(request.Url);

        if (request.Method.ToUpper() == "POST")
        {

            var xxl = request.PostData;
            PostData post = request.PostData;
            FormData postData = (FormData)post;
            var keys = postData.GetPairKeys();
            foreach (var item in keys)
            {
                var val = postData.GetPairValues(item);
                Console.WriteLine(item + ":" + val[0]);
                httpRequest.AddParam(item, val[0]);
            }
        }
        var heads = request.Headers.GetHeaders();
        foreach (KeyValuePair<string, List<string>> pair in heads)
        {
            httpRequest.AddHeader(pair.Key, pair.Value[0]);
            Console.WriteLine(pair.Key);
            Console.WriteLine(pair.Value[0]);
            Console.WriteLine("===================");
        }
        string path = request.Url;
        string domain = spider.GetUrlDomain(request.Url);
        path = path.Replace("https://" + domain, string.Empty);
        httpRequest.AddHeader("Host", domain);
        httpRequest.Path = path;
        httpResponse = http.SynchronousRequest(domain, 443, true, httpRequest);
        Console.WriteLine(httpResponse.StatusCode);
        if (httpResponse == null)
        {
            return new UrlResponse(Encoding.UTF8.GetBytes(string.Empty), (System.Net.HttpStatusCode)httpResponse.StatusCode);
        }
        return new UrlResponse(Encoding.UTF8.GetBytes(httpResponse.BodyStr), (System.Net.HttpStatusCode)httpResponse.StatusCode);
    }
}

显然,它可以简化。但如果有人有同样的问题,这就是我的解决办法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49807342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档