none
Webbrowser如何设置代理 RRS feed

  • 问题

  • Webbrowser能不能设置代理,与IE的独立开来?

    我在网上查了很多资料,似乎都做不到这样。但是很多浏览器是可以做到自动代理,同时不需要改变IE的代理设置的,是如何实现的呢?

    谢谢

     

    2008年12月17日 0:45

全部回复

  •  

    挑剔一点,能否使用VB2008本身的类库实现,而不需要引用外部类库?

    谢谢:)

    2009年1月21日 9:58
  •  abcjackson 写:

     

    挑剔一点,能否使用VB2008本身的类库实现,而不需要引用外部类库?

    谢谢:)

     

    似乎System.Net.WebProxy类是可以的

    http://msdn.microsoft.com/zh-cn/vstudio/system.net.webproxy(VS.80).aspx

    具体的不太清楚.....

    2009年1月21日 14:24
  •  Kaedei 写:
     abcjackson 写:

     

    挑剔一点,能否使用VB2008本身的类库实现,而不需要引用外部类库?

    谢谢:)

     

    似乎System.Net.WebProxy类是可以的

    http://msdn.microsoft.com/zh-cn/vstudio/system.net.webproxy(VS.80).aspx

    具体的不太清楚.....

     

    这个我也看过,但是Webbrowser怎样跟Webclient拉上关系?要怎么写才行呢?我也是看不太懂
    2009年1月21日 14:48
  •  

    今天我特别试了这段代码,在VB2008下似乎不管用.

     

    Code Snippet

    Module AgentForWebBrowser
        Private Structure INTERNET_PROXY_INFO
            Dim dwAccessType As Long, _
                lpszProxy As String, _
                lpszProxyBypass As String
        End Structure

        Private Const INTERNET_OPEN_TYPE_DIRECT = 1
        Private Const INTERNET_OPEN_TYPE_PROXY = 3
        Private Const INTERNET_OPTION_PROXY = 38
        Private Const INTERNET_OPTION_SETTINGS_CHANGED = 39

        Private Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" _
        (ByVal hInternet As Long, ByVal dwOption As Long, _
        ByVal lpBuffer As Object, _
        ByVal dwBufferLength As Long) As Long

        Public Sub SetProxy(ByVal aStrIP As String, ByVal aStrPort As String, ByVal aBolUseProxy As Boolean)
            Dim strProxy As String
            Dim inf As INTERNET_PROXY_INFO

            aStrIP = Trim(aStrIP)
            aStrPort = Trim(aStrPort)
            If (aStrIP + aStrPort = "") Or Not aBolUseProxy Then
                strProxy = ""
            Else
                strProxy = "http://" + aStrIP + ":" + aStrPort
            End If

            If Trim(strProxy) <> "" Then
                inf.dwAccessType = INTERNET_OPEN_TYPE_PROXY
                inf.lpszProxy = strProxy
                inf.lpszProxyBypass = ""

                Call InternetSetOption(0, INTERNET_OPTION_PROXY, inf, Len(inf))
                Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, "", 0)
            Else
                inf.dwAccessType = INTERNET_OPEN_TYPE_DIRECT
                inf.lpszProxy = ""
                inf.lpszProxyBypass = ""

                Call InternetSetOption(0, INTERNET_OPTION_PROXY, inf, Len(inf))
                Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, "", 0)
            End If
        End Sub
    End Module

     

     

    在程序启动时,MyBase.Load事件中添加代码

    Code Snippet

    '设置代理服务器
    SetProxy("115.45.10.159", "8080", True)

     

     

     

    但是运行后,在Webbrowser控件中载入网页还是无法连接显示页面

    是不是我哪个地方弄错了呢?

     

    请指点一下,谢谢:)

    2009年1月22日 16:20
  • 嘿嘿,这个代码终于管用了,谢谢
    2009年1月29日 7:58
  • 请问大哥是怎么管用的,小弟急需解决此问题,

    请指点一下,谢谢

    2009年6月15日 16:40
  • Module AgentForWebBrowser
        Private Structure INTERNET_PROXY_INFO
            Dim dwAccessType As Int32, _
                lpszProxy As String, _
                lpszProxyBypass As String
        End Structure
    
        Private Const INTERNET_OPEN_TYPE_DIRECT = 1
        Private Const INTERNET_OPEN_TYPE_PROXY = 3
        Private Const INTERNET_OPTION_PROXY = 38
        Private Const INTERNET_OPTION_SETTINGS_CHANGED = 39
    
        <Runtime.InteropServices.DllImport("wininet.dll")> _
        Private Function InternetSetOption(ByVal hInternet As IntPtr, _
                                        ByVal dwOption As Int32, _
        <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.AsAny)> ByVal lpBuffer As Object, _
                                        ByVal dwBufferLength As Int32) As Boolean
        End Function
            Public Sub SetProxy(Optional ByVal ProxyStr As String = "", Optional ByVal ProxyBypass As String = "")
            Static ProxyInfo As INTERNET_PROXY_INFO
            If Trim(ProxyStr) = "" Then
                ProxyInfo.dwAccessType = INTERNET_OPEN_TYPE_DIRECT
                ProxyInfo.lpszProxy = ""
                ProxyInfo.lpszProxyBypass = ""
            Else
                ProxyInfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY
                ProxyInfo.lpszProxy = ProxyStr
                ProxyInfo.lpszProxyBypass = Trim(ProxyBypass)
            End If
            Call InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, ProxyInfo, System.Runtime.InteropServices.Marshal.SizeOf(ProxyInfo))
            Call InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, "", 0)
        End Sub
    
        Public Sub SetProxy(ByVal ProxyType As String, ByVal IP As String, ByVal Port As String, Optional ByVal ProxyBypass As String = "")
            SetProxy(Trim(ProxyType) + "://" + Trim(IP) + ":" + Trim(Port), ProxyBypass)
        End Sub
    End Module
    试一下这段代码吧,主要是DLL声明的问题。
    2009年6月16日 10:54
  • 谢谢,已研究成功!此代码可行
    2009年6月20日 16:00
  • Module AgentForWebBrowser
    
        Private Structure INTERNET_PROXY_INFO
    
            Dim dwAccessType As Int32, _
    
                lpszProxy As String, _
    
                lpszProxyBypass As String
    
        End Structure
    
    
    
        Private Const INTERNET_OPEN_TYPE_DIRECT = 1
    
        Private Const INTERNET_OPEN_TYPE_PROXY = 3
    
        Private Const INTERNET_OPTION_PROXY = 38
    
        Private Const INTERNET_OPTION_SETTINGS_CHANGED = 39
    
    
    
        <Runtime.InteropServices.DllImport("wininet.dll")> _
    
        Private Function InternetSetOption(ByVal hInternet As IntPtr, _
    
                                        ByVal dwOption As Int32, _
    
        <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.AsAny)> ByVal lpBuffer As Object, _
    
                                        ByVal dwBufferLength As Int32) As Boolean
    
        End Function
    
            Public Sub SetProxy(Optional ByVal ProxyStr As String = "", Optional ByVal ProxyBypass As String = "")
    
            Static ProxyInfo As INTERNET_PROXY_INFO
    
            If Trim(ProxyStr) = "" Then
    
                ProxyInfo.dwAccessType = INTERNET_OPEN_TYPE_DIRECT
    
                ProxyInfo.lpszProxy = ""
    
                ProxyInfo.lpszProxyBypass = ""
    
            Else
    
                ProxyInfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY
    
                ProxyInfo.lpszProxy = ProxyStr
    
                ProxyInfo.lpszProxyBypass = Trim(ProxyBypass)
    
            End If
    
            Call InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, ProxyInfo, System.Runtime.InteropServices.Marshal.SizeOf(ProxyInfo))
    
            Call InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, "", 0)
    
        End Sub
    
    
    
        Public Sub SetProxy(ByVal ProxyType As String, ByVal IP As String, ByVal Port As String, Optional ByVal ProxyBypass As String = "")
    
            SetProxy(Trim(ProxyType) + "://" + Trim(IP) + ":" + Trim(Port), ProxyBypass)
    
        End Sub
    
    End Module
    
    
    试一下这段代码吧,主要是DLL声明的问题。

    你好,我现在也碰到了这个问题,但你能告诉我到底怎么使用吗?我在模块中添加了你上面的代码,然后在form的load中用 SetProxy("192.168.1.10", "8080", True),并没有成功,肯请指教。
    说到更要做到,要做就做最好
    2009年7月9日 3:56
  • 你好,我现在也碰到了这个问题,但你能告诉我到底怎么使用吗?我在模块中添加了你上面的代码,然后在form的load中用 SetProxy("192.168.1.10", "8080", True),并没有成功,肯请指教。
    说到更要做到,要做就做最好
    2009年7月9日 3:59
  • 你好,我现在也碰到了这个问题,但你能告诉我到底怎么使用吗?我在模块中添加了你上面的代码,然后在form的load中用 SetProxy("192.168.1.10", "8080", True),并没有成功,肯请指教。
    说到更要做到,要做就做最好
    您好, ProxyBypass是过滤不使用代理服务器的网站,不该设为True值,如果不需要,可以设置为String.Empty 除此之外,应该没有大问题,请再检查一下代理服务器是不是可用
    编程是永无止境的,向大家学习
    2009年7月11日 3:26