我正在通过C#使用代理,并且想知道是否有人知道管理它们的好方法。
如您所知,代理的状态会随着时间的推移而发生变化,因此应该稍后重试或删除那些出现问题的代理。维护此代理列表以便最佳代理使用的好方法是什么,而失败的代理不会经常使用或在某些超时之后等等...
我所指的代理类型只是一个可以应用于HttpWebRequest的WebProxy。
尽量减少使用错误代理的请求数量也很重要。
答案 0 :(得分:1)
如果我了解您,您谈论的是用于连接到Web服务器的 HTTP 代理,不是,例如,WCF代理或RPC代理。
奇怪的是,你表现得好像你的程序会使用多个程序。这确实是一个非常罕见的计划!我们大多数人只使用操作系统配置中内置的默认值。代理服务器突然停机的想法似乎更为罕见。您是否计划为您的请求随机选择代理?您是否只是想找到代理服务器?
无论如何,只有这样您才能知道代理服务器是否无效是检查response.StatusCode。 BadGateway
或GatewayTimeout
应该可以解决问题。
所以...管理哪些是好的,哪些是坏的。我坚持使用一个简单的字典来锁定代理的URI,并将WebProxy对象作为值。假设我理解你要做的是什么,如果你尝试代理URI并且它很好,就把它添加到字典中。如果您发现现有代理是坏的,请从字典中删除它。
答案 1 :(得分:0)
我认为优先级队列可能太多了。此外,您将使用哪些优先级或优先级来对代理列表进行分类?
我认为在这种情况下更简单的设计可能会更好:两个“桶”或两个FIFO列表,一个用于推送最新的有效代理,另一个列表用于推送无效代理。
然后,您从两者中弹出代理IP地址以再次检查。您可以决定更频繁地检查哪个代理列表。
具有 proxy-ip-list.com 等代理IP列表的网站可能会使用这样的方法。