带代理的 VB.net HttpWebRequest
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17911946/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
VB.net HttpWebRequest with Proxy
提问by Marc Intes
my code works when i am not using a proxy but i want to use a proxy so that my real IP is not revealed when sending a request. Whenever i try to run my program it gives me an error saying "The remote server returned an error: (417) Expectation Failed." and it is pointing at "response = CType(request.GetResponse(), HttpWebResponse)". Is there something wrong with my code? I am really confused right now. Any help will do thanks.
当我不使用代理但我想使用代理时,我的代码可以工作,以便在发送请求时不会透露我的真实 IP。每当我尝试运行我的程序时,它都会提示我“远程服务器返回错误:(417) 预期失败”。它指向“response = CType(request.GetResponse(), HttpWebResponse)”。我的代码有问题吗?我现在真的很困惑。任何帮助都会感谢。
Dim myProxy As New WebProxy("173.234.249.68", 8800)
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim tempCookies As New CookieContainer
request = CType(WebRequest.Create("http://samplewebsite.com"), HttpWebRequest)
request.Proxy = myProxy
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = POST.Length
request.KeepAlive = True
request.CookieContainer = tempCookies
response = CType(request.GetResponse(), HttpWebResponse)
tempCookies.Add(response.Cookies)
response.Close()
回答by Geared Silently
<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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label4.Text = (TextBox1.Text & ":" & TextBox2.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
UseProxy(Label4.Text)
WebBrowser1.Navigate(TextBox3.Text)
End Sub
End Class
结束班
回答by Ugur Catak
Cahnge the line:
更改线路:
Dim myProxy As New WebProxy("173.234.249.68", 8800)
To
到
Dim myProxy As New WebProxy("173.234.249.68:8800")
回答by alfin p. efendy
Dim myProxy As New WebProxy("173.234.249.68:8800", true)
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim tempCookies As New CookieContainer
request = CType(WebRequest.Create("http://samplewebsite.com"), HttpWebRequest)
request.Proxy = myProxy
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = POST.Length
request.KeepAlive = True
request.CookieContainer = tempCookies
response = CType(request.GetResponse(), HttpWebResponse)
tempCookies.Add(response.Cookies)
response.Close()

