Walter Boss
Walter Boss

Reputation: 173

Webbrowser Each Control different proxy

I wanted to know whether it is possible to set proxy for each different webbrowser in an application (same process).

I have searched a lot to find codes to change proxy system wide by modifying registry and another process specific proxy. But i want each webbrowser inside same process to have different proxy

Eg: WebBrowser1 Proxy --> 95.188.106.78:3128

WebBrowser 2 Proxy --> 89.218.160.162:9090

WebBrowser 3 Proxy --> 78.39.68.145:3128 and so on

Or if it is not possible by using WebBrowser directly, then can anyone else suggest what can i use to achieve this (not webrequests, i want browser only through which i can load all data and user can interact with it but with different proxies) like using geckofx or webkit? But i don't know if its possible in them or not

Upvotes: 2

Views: 2563

Answers (2)

Allen
Allen

Reputation: 927

Unfortunately, you cannnot set the proxy per insnance. Not even per application - it is global. If you chnage it for a .net app, it will impact IE as well.

Here is complete code to change the proxy.

Create a "Form1" with buttons "B_Get" "B_Set" and "B_Disable" and then paste this code.

It should work for you. I used this app as proof of concept for an automatic proxy cycler i built.

Depending on your applications needs, you may be able to switch it, and then switch it back. Note that it WILL impact internet explorer.

To verify that this is working, check internet explorer. You will probably have to open/close the options dialog for IE, but you shouldnt need to restart the browser.

This will also impact .NET apps on the fly - if you run my program while yours is running, you will be able to change the proxy that your program is using.

Imports Microsoft.Win32
Imports System.Runtime.InteropServices



Public Class Form1

    <DllImport("wininet.dll")>
    Public Shared Function InternetSetOption(hInternet As IntPtr, dwOption As Integer, lpBuffer As IntPtr, dwBufferLength As Integer) As Boolean
    End Function

    Public Const INTERNET_OPTION_SETTINGS_CHANGED As Integer = 39
    Public Const INTERNET_OPTION_REFRESH As Integer = 37


    'This function is what is called after editing the registry - this causes internet explorer to update its proxy even if it is already open.
    'It also effects the web browser control in any VB.net application that is running.
    Public Sub globalProxy_apply()
        Dim settingsReturn As Boolean = False
        Dim refreshReturn As Boolean = False
        settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0)
        If Not settingsReturn Then
            MessageBox.Show("Error 001: Line ""InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0)"" failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
        refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0)
        If Not refreshReturn Then
            MessageBox.Show("Error 002: Line ""InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0)"" failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub

    Public Function globalProxy_IsProxyEnabled() As Boolean
        Try
            Dim Regs As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", RegistryKeyPermissionCheck.ReadWriteSubTree)
            If Regs.GetValue("ProxyEnable") <> Nothing Then
                If Regs.GetValue("ProxyEnable").ToString() = "0" Then
                    Return False
                Else
                    Return True
                End If
            Else
                Return False
            End If
        Catch ex As Exception
            MessageBox.Show("Error 01X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End Try
    End Function

    Public Function globalProxy_GetProxyServer() As String
        Try
            Dim Regs As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", RegistryKeyPermissionCheck.ReadWriteSubTree)
            If Regs.GetValue("ProxyServer") <> Nothing Then
                Return Regs.GetValue("ProxyServer").ToString()
            Else
                Return ""
            End If
        Catch ex As Exception
            MessageBox.Show("Error 02X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return ""
        End Try
    End Function

    Public Sub globalProxy_DisableProxy()
        Dim regkey As RegistryKey
        Try
            regkey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings")
            regkey.SetValue("ProxyEnable", False, RegistryValueKind.DWord)
            regkey.Close()
        Catch ex As Exception
            MessageBox.Show("Error 03X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

        globalProxy_apply()
    End Sub

    Public Sub globalProxy_SetProxy(ByVal ServerName As String)
        Dim regkey As RegistryKey
        Try
            regkey = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings")
            regkey.SetValue("ProxyServer", ServerName, RegistryValueKind.Unknown)
            regkey.SetValue("ProxyEnable", True, RegistryValueKind.DWord)
            regkey.Close()
        Catch ex As Exception
            MessageBox.Show("Error 04X: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

        globalProxy_apply()
    End Sub

    Private Sub B_Set_Click(sender As System.Object, e As System.EventArgs) Handles B_Set.Click
        If TextBox1.Text = "" Then
            globalProxy_DisableProxy()
        Else
            globalProxy_SetProxy(TextBox1.Text)
        End If

    End Sub

    Private Sub B_Disable_Click(sender As System.Object, e As System.EventArgs) Handles B_Disable.Click
        globalProxy_DisableProxy()
    End Sub

    Private Sub B_Get_Click(sender As System.Object, e As System.EventArgs) Handles B_Get.Click
        If globalProxy_IsProxyEnabled() Then
            TextBox1.Text = globalProxy_GetProxyServer()
        Else
            TextBox1.Text = ""
        End If
    End Sub

End Class

Upvotes: 0

Cubsoft
Cubsoft

Reputation: 1157

Take a look at this - sorry its VB.NET

Its basically saying you can configure it through editing one of the IE DLL's by changing the InernetSetOption. Hope this helps.

Here is another link that may help

Upvotes: 1

Related Questions