我想寫一個本地代理應用程序。我知道代理應用程序在理論上如何運作。 我已經做了所有處理傳入連接的相關事宜。但問題是我應該如何發送請求哪個客戶端請求到指定的Url。當我嘗試創建TcpClient
到指定的URL和端口的連接,它拋出以下異常:繞過代理使用TcpClient
沒有這樣的主機被稱爲
編輯:我想我應該繞過代理像FireFox甚至還在做系統代理套裝。
任何想法都會有所幫助。 在此先感謝。
我想寫一個本地代理應用程序。我知道代理應用程序在理論上如何運作。 我已經做了所有處理傳入連接的相關事宜。但問題是我應該如何發送請求哪個客戶端請求到指定的Url。當我嘗試創建TcpClient
到指定的URL和端口的連接,它拋出以下異常:繞過代理使用TcpClient
沒有這樣的主機被稱爲
編輯:我想我應該繞過代理像FireFox甚至還在做系統代理套裝。
任何想法都會有所幫助。 在此先感謝。
基於colinsmith提供的鏈接,我使用的TcpClient做繞過代理。這裏是我是怎麼做的:
public static TcpClient CreateTcpClient(string url)
{
var webRequest = WebRequest.Create(url);
webRequest.Proxy = null;
var webResponse = webRequest.GetResponse();
var resposeStream = webResponse.GetResponseStream();
const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance;
var rsType = resposeStream.GetType();
var connectionProperty = rsType.GetProperty("Connection", flags);
var connection = connectionProperty.GetValue(resposeStream, 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://alandean.blogspot.co.uk/2010/06/routing-tcpclient-http-requests-through.html – 2012-07-29 15:33:39