【发布时间】:2014-04-19 05:24:13
【问题描述】:
我在我的脚本中使用来自https://github.com/SirCmpwn/RedditSharp 的 RedditSharp,我只是问,在使用此连接时如何实现代理?我可以更改代理中标吗?
【问题讨论】:
-
什么类型的代理?远程呼叫代理?网络代理网站?模拟对象?你能把你的问题说得更具体些吗?
-
我正计划使用 SOCKS。
我在我的脚本中使用来自https://github.com/SirCmpwn/RedditSharp 的 RedditSharp,我只是问,在使用此连接时如何实现代理?我可以更改代理中标吗?
【问题讨论】:
没有独立的方法,你不能不修改这个库源代码。
所以最轻松的方式:
RedditSharp 的重载构造函数 - 添加以 IWebAgent 作为类型的新参数。所以它看起来像这样:
public Reddit() : this(new WebAgent())
{
}
public Reddit(IWebAgent agent)
{
JsonSerializerSettings = new JsonSerializerSettings();
JsonSerializerSettings.CheckAdditionalContent = false;
JsonSerializerSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
_webAgent = agent;
CaptchaSolver = new ConsoleCaptchaSolver();
}
从 RedditSharp.WebAgent 类声明中删除“sealed”关键字。
将 RedditSharp.WebAgent.CreateRequest 方法设为虚拟,所以它看起来像这样:
public virtual HttpWebRequest CreateRequest(string url, string method, bool prependDomain = true)
{
...
}
基于旧的创建自己的 WebAgent:
public class MyAgent: WebAgent
{
public IWebProxy Proxy { get; set; }
public override HttpWebRequest CreateRequest(string url, string method, bool prependDomain = true)
{
var base_request = base.CreateRequest(url, method, prependDomain);
if (Proxy != null)
{
base_request.Proxy=Proxy;
}
return base_request;
}
}
在你的代码中使用它:
var agent = new MyAgent();
var reddit = new Reddit(agent);
...
agent.Proxy = new WebProxy("someproxy.net", 8080);
所以现在您可以随时随地设置代理。没有真正测试过,但它必须工作。
【讨论】: