Web浏览器控件与代理轮换无法完美配合

时间:2012-06-24 23:27:11

标签: c# winforms visual-studio-2010 webbrowser-control

我正在使用许多ipz并且在一段时间之后使用它们一些重复使用此代码在几秒钟内重复:

  string key = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";

  RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(key, true);

  RegKey.SetValue("ProxyServer", proxy);

  RegKey.SetValue("ProxyEnable", 1);

  webBrowser1.Navigate(customLinks[0].ToString());

问题是它并不总是成功,因为我注意到很多次。假设一个ip被阻止所以需要下一个,但我仍然看到下一个的块,甚至是下一个。

所以假设它没有代理这么快等等?也许它需要刷新。请告诉我如何实现这个

谢谢

2 个答案:

答案 0 :(得分:1)

我从google搜索获得了很多帮助,但是不记得确切的链接:

这是代码,我调用刷新函数并传递代理,它可以随时随地100%工作。

public struct Struct_INTERNET_PROXY_INFO
    {
        public int dwAccessType;
        public IntPtr proxy;
        public IntPtr proxyBypass;
    };

    [DllImport("wininet.dll", SetLastError = true)] 
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

    private void RefreshIESettings(string strProxy)
    {
        const int INTERNET_OPTION_PROXY = 38;
        const int INTERNET_OPEN_TYPE_PROXY = 3;

        Struct_INTERNET_PROXY_INFO struct_IPI;



        // Filling in structure
        struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
        struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);
        struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");

        // Allocating memory
        IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));

        // Converting structure to IntPtr
        Marshal.StructureToPtr(struct_IPI, intptrStruct, true);

        bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));


    } 

答案 1 :(得分:0)

听起来您需要在浏览器中设置单个代理,并自行实现该代理,以便将请求转移到您的代理列表。