Code Bye

HttpWebRequest如何使用SOCKS v5代理

在使用HttpWebRequest获取目标页面的源码时,由于需要采用代理,于是就写了浏览器使用的代理
,
但是,浏览器采用的是SOCKS v5 代理,
效果如图

HttpWebRequestWebProxy的属性使用的是Http代理——经过一番痛苦的尝试才发现。
关键代码如下

/// <summary>
/// 获取页面源码
/// </summary>
/// <param name="url">页面地址</param>
/// <param name="server">代理服务器地址</param>
/// <param name="port">代理服务器端口</param>
/// <param name="username">代理服务器登录用户名</param>
/// <param name="password">代理服务器登录密码</param>
/// <returns></returns>
public static string GetWebSource(string url, string server, int port, string username, string password)
{
	try
	{
		HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
		req.Timeout = 1000 * 10;
		req.Method = "GET";
		#region 设置Http代理
		if (string.IsNullOrEmpty(server) == false)
		{
			WebProxy proxy = new WebProxy(server, port);
			if (string.IsNullOrEmpty(username) == false)
			{
				proxy.Credentials = new NetworkCredential(username, password);
			}
			req.Proxy = proxy;
		}
		#endregion
		using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
		{
			string charSet = res.CharacterSet;
			if (string.IsNullOrEmpty(charSet))
			{
				charSet = "utf-8";
			}
			using (StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding(charSet)))
			{
				string webSource = sr.ReadToEnd();
				return webSource;
			}
		}
	}
	catch (Exception ex)
	{
		return ex.Message;
	}
}

调用代码如下:

this.richTextBox1.Text = WebDataManager.GetWebSource("http://www.mitbbs.com/pc/pcmain.php", "127.0.0.1", 9150, null, null);

异常如下

关键信息“Tor is not an Http Proxy”。
请问,如何让HttpWebRequest使用SOCKS v5代理呢?

#1
这问题真有那么难吗?我对这块实在是”知之甚少“,还望各位前辈相助!
#2

50分

可以参考
http://wenda.io/questions/293920/use-webclient-with-socks-proxy.html
 WebRequest/WebResponse不支持

或者下载一个ProxySocket代码
http://www.mentalis.org/soft/class.qpx?id=9

#3
@net_lover,谢谢,奋斗到今天凌晨2:00,已改用ProxySocket,重新封装了发送Http请求的代码,已实现所需功能
#4
但是代码功能还不完善,暂时就不分享出来了,等完善之后,我将在此处给出
#5
楼主在吗,请把你的代码帖一下可以吗

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明HttpWebRequest如何使用SOCKS v5代理