WebBrowser如何使用id:pass的私有代理

时间:2015-02-23 12:14:09

标签: .net vb.net proxy

所以基本上我已经得到了这些由零碎组成的代码,并且在触发WebBrowser1.navigating时我将它用作事件监听器,因此它将在每个导航上使用代理,没有例外。

唯一的问题是我不知道如何修改代码以使用基于id的私有代理:pass

#Region "Using Proxy"
<Runtime.InteropServices.DllImport("wininet.dll", SetLastError:=True)> _
Private Shared Function InternetSetOption(ByVal hInternet As IntPtr, ByVal dwOption As Integer, ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean
End Function

Public Structure Struct_INTERNET_PROXY_INFO
    Public dwAccessType As Integer
    Public proxy As IntPtr
    Public proxyBypass As IntPtr
End Structure

Private Sub UseProxy(ByVal strProxy As String)
    Const INTERNET_OPTION_PROXY As Integer = 38
    Const INTERNET_OPEN_TYPE_PROXY As Integer = 3

    Dim struct_IPI As Struct_INTERNET_PROXY_INFO

    struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY
    struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy)
    struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local")

    Dim intptrStruct As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI))

    Marshal.StructureToPtr(struct_IPI, intptrStruct, True)

    Dim iReturn As Boolean = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, System.Runtime.InteropServices.Marshal.SizeOf(struct_IPI))
End Sub
#End Region

这是我在任何需要的地方使用的代码片段:

Private Sub WebBrowser1_Navigating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    UseProxy(TextBox3.Text & ":" & TextBox4.Text)
End Sub

我确信解决方案非常简单,只是因为它避免了我疯狂的VB技能!

1 个答案:

答案 0 :(得分:0)

此知识库文章介绍了如何使用wininet库实现身份验证

How To Handle Proxy Authorization with WinInet