Hola, estoy urgando un poco con vb6 y necesito ayuda para implementar una opción de proxy en un proyecto. He googleado bastante intentando encontrar ejemplos para orientarme, pero parece que hay un aura oscura entorno a esto de los proxys presuponiendo que se van a utilizar con fines no legales xD.
Asi que recurro a este foro a ver si alguien puede orientarme un poco, se que tengo que hacerlo mediante el control winsock pero no he tenido mucha suerte en mis intentos...
Adjunto una imagen para que se hagan una idea más o menos:
[Enlace externo eliminado para invitados]
Saludos!
Gracias por la respuesta SharkI, ya pensé en algo de eso pero no es una solución que me acabe de convencer.
Otra opción que he visto es modificar la clave del registro donde IE guarda la opción de proxy.
De momento la solución con la que me quedo es esta:
Proxy module:
Código a insertar en form:
(crear dos commandButtons, uno llamado "cmdSetProxy" que utilizaremos para activar el proxy y el otro "cmdDisableProxy" que utilizaremos para desactivar el proxy).
Funciona bastante bien, espero que le sirva a alguien y lo adapte a su proyecto.
De todas formas no doy el tema por solucionado, si alguien sabe alguna alternativa sobre como incluir una "opción de proxy" que no sea las que ya se han planteado estaría encantado de leerlas! ;)
Un saludo.
Otra opción que he visto es modificar la clave del registro donde IE guarda la opción de proxy.
De momento la solución con la que me quedo es esta:
Proxy module:
Código: Seleccionar todo
Option Explicit
Private Type INTERNET_PER_CONN_OPTION
dwOption As Long
dwValue1 As Long
dwValue2 As Long
End Type
Private Type INTERNET_PER_CONN_OPTION_LIST
dwSize As Long
pszConnection As Long
dwOptionCount As Long
dwOptionError As Long
pOptions As Long
End Type
Private Const INTERNET_PER_CONN_FLAGS As Long = 1
Private Const INTERNET_PER_CONN_PROXY_SERVER As Long = 2
Private Const INTERNET_PER_CONN_PROXY_BYPASS As Long = 3
Private Const PROXY_TYPE_DIRECT As Long = &H1
Private Const PROXY_TYPE_PROXY As Long = &H2
Private Const INTERNET_OPTION_REFRESH As Long = 37
Private Const INTERNET_OPTION_SETTINGS_CHANGED As Long = 39
Private Const INTERNET_OPTION_PER_CONNECTION_OPTION As Long = 75
Private Declare Function InternetSetOption _
Lib "wininet.dll" Alias "InternetSetOptionA" ( _
ByVal hInternet As Long, ByVal dwOption As Long, _
lpBuffer As Any, ByVal dwBufferLength As Long) As Long
' Set Proxy
Public Function SetConnectionOptions(ByVal conn_name As String, ByVal proxy_full_addr As String) As Boolean
' conn_name: active connection name. (LAN = "")
' proxy_full_addr : eg "193.28.73.241:8080"
Dim list As INTERNET_PER_CONN_OPTION_LIST
Dim bReturn As Boolean
Dim dwBufSize As Long
Dim options(0 To 2) As INTERNET_PER_CONN_OPTION
Dim abConnName() As Byte
Dim abProxyServer() As Byte
Dim abProxyBypass() As Byte
dwBufSize = Len(list)
' Fill out list struct.
list.dwSize = Len(list)
' NULL == LAN, otherwise connection name.
abConnName() = StrConv(conn_name & vbNullChar, vbFromUnicode)
list.pszConnection = VarPtr(abConnName(0))
' Set three options.
list.dwOptionCount = 3
' Set flags.
options(0).dwOption = INTERNET_PER_CONN_FLAGS
options(0).dwValue1 = PROXY_TYPE_DIRECT Or PROXY_TYPE_PROXY
' Set proxy name.
options(1).dwOption = INTERNET_PER_CONN_PROXY_SERVER
abProxyServer() = StrConv(proxy_full_addr & vbNullChar, vbFromUnicode)
options(1).dwValue1 = VarPtr(abProxyServer(0)) '//"http://proxy:80"
' Set proxy override.
options(2).dwOption = INTERNET_PER_CONN_PROXY_BYPASS
abProxyBypass() = StrConv("local" & vbNullChar, vbFromUnicode)
options(2).dwValue1 = VarPtr(abProxyBypass(0))
list.pOptions = VarPtr(options(0))
' Make sure the memory was allocated.
If (0& = list.pOptions) Then
' Return FALSE if the memory wasn't allocated.
Debug.Print "Failed to allocate memory in SetConnectionOptions()"
SetConnectionOptions = 0
End If
' Set the options on the connection.
bReturn = InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)
' Free the allocated memory.
Erase options
Erase abConnName
Erase abProxyServer
Erase abProxyBypass
dwBufSize = 0
list.dwOptionCount = 0
list.dwSize = 0
list.pOptions = 0
list.pszConnection = 0
Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, ByVal 0&, 0)
Call InternetSetOption(0, INTERNET_OPTION_REFRESH, ByVal 0&, 0)
SetConnectionOptions = bReturn
End Function
' Disable Proxy
Public Function DisableConnectionProxy(ByVal conn_name As String) As Boolean
' conn_name: active connection name. (LAN = "")
Dim list As INTERNET_PER_CONN_OPTION_LIST
Dim bReturn As Boolean
Dim dwBufSize As Long
Dim options(0) As INTERNET_PER_CONN_OPTION
Dim abConnName() As Byte
dwBufSize = Len(list)
' Fill out list struct.
list.dwSize = Len(list)
' NULL == LAN, otherwise connectoid name.
abConnName() = StrConv(conn_name & vbNullChar, vbFromUnicode)
list.pszConnection = VarPtr(abConnName(0))
' Set three options.
list.dwOptionCount = 1
' Set flags.
options(0).dwOption = INTERNET_PER_CONN_FLAGS
options(0).dwValue1 = PROXY_TYPE_DIRECT
list.pOptions = VarPtr(options(0))
' Make sure the memory was allocated.
If (0 = list.pOptions) Then
' Return FALSE if the memory wasn't allocated.
Debug.Print "Failed to allocate memory in DisableConnectionProxy()"
DisableConnectionProxy = 0
End If
' Set the options on the connection.
bReturn = InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)
' Free the allocated memory.
Erase options
Erase abConnName
dwBufSize = 0
list.dwOptionCount = 0
list.dwSize = 0
list.pOptions = 0
list.pszConnection = 0
Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, ByVal 0&, 0)
Call InternetSetOption(0, INTERNET_OPTION_REFRESH, ByVal 0&, 0)
DisableConnectionProxy = bReturn
End Function
(crear dos commandButtons, uno llamado "cmdSetProxy" que utilizaremos para activar el proxy y el otro "cmdDisableProxy" que utilizaremos para desactivar el proxy).
Código: Seleccionar todo
Private Sub cmdSetProxy_Click()
Dim conn_name As String, proxy_full_addr As String
conn_name = ""
proxy_full_addr = "XXX.XXX.XXX.XXX:XXXX" ' ---> INSERTA AQUÍ LA DIRECCIÓN DE PROXY (IP:PUERTO) <---
Call SetConnectionOptions(conn_name, proxy_full_addr)
End Sub
Private Sub cmdDisableProxy_Click()
Dim conn_name As String
conn_name = ""
Call DisableConnectionProxy(conn_name)
End Sub
De todas formas no doy el tema por solucionado, si alguien sabe alguna alternativa sobre como incluir una "opción de proxy" que no sea las que ya se han planteado estaría encantado de leerlas! ;)
Un saludo.