zoukankan      html  css  js  c++  java
  • C# 通过HTTP代理访问Socket来获取邮件

    C# 通过HTTP代理访问Socket来获取邮件

    关键穿透代理的代码(通过HTTP代理获取TcpClent)

    public class ClientHelper
        {
            public static TcpClient connectViaHTTPProxy(
                string targetHost,
                int targetPort,
                string httpProxyHost,
                int httpProxyPort,
                string proxyUserName,
                string proxyPassword)
            {
                var uriBuilder = new UriBuilder
                {
                    Scheme = Uri.UriSchemeHttp,
                    Host = httpProxyHost,
                    Port = httpProxyPort
                };
    
                var proxyUri = uriBuilder.Uri;
    
                var request = WebRequest.Create(
                    "http://" + targetHost + ":" + targetPort);
    
                var webProxy = new WebProxy(proxyUri);
    
                request.Proxy = webProxy;
                request.Method = "CONNECT";
    
                var credentials = new NetworkCredential(
                    proxyUserName, proxyPassword);
    
                webProxy.Credentials = credentials;
    
                var response = request.GetResponse();
    
                var responseStream = response.GetResponseStream();
                Debug.Assert(responseStream != null);
    
                const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Instance;
    
                var rsType = responseStream.GetType();
                var connectionProperty = rsType.GetProperty("Connection", Flags);
    
                var connection = connectionProperty.GetValue(responseStream, null);
                var connectionType = connection.GetType();
                var networkStreamProperty = connectionType.GetProperty("NetworkStream", Flags);
    
                var networkStream = networkStreamProperty.GetValue(connection, null);
                var nsType = networkStream.GetType();
                var socketProperty = nsType.GetProperty("Socket", Flags);
                var socket = (Socket)socketProperty.GetValue(networkStream, null);
    
                return new TcpClient { Client = socket };
            }
        }
    

     原文地址:http://www.replicator.org/journal/201011170043-net-connecting-a-tcpclient-through-an-http-proxy-with-authentication

  • 相关阅读:
    快排 [模板]
    翻硬币
    Euphoria与量子波动速读
    高精度例题
    Div3 595 E
    Div 595 C1 C2
    常用 STL 整理
    CF 595 Div3 B2
    【思维】复杂度均摊+并查集——icpc cerc 2019 Saba1000kg
    离散化+圆直线交点+转化——icpc cerc 2019 D
  • 原文地址:https://www.cnblogs.com/mxm2005/p/4589098.html
Copyright © 2011-2022 走看看