ahilesul писал(а):нельзя одновременно открыть 10 браузеров с разными проксями для каждого
Qwertiy писал(а):А ahilesul не говорил, что отображаь не надо
Qwertiy писал(а):А ahilesul не говорил, что отображаь не надоahilesul писал(а):нельзя одновременно открыть 10 браузеров с разными проксями для каждого
Если постараться, то можно
ahilesul писал(а):подскажи как сделать именно для Webbrowser (IE) ?
Qwertiy писал(а):ahilesul писал(а):подскажи как сделать именно для Webbrowser (IE) ?
Если кое-как по-быстрому и без гарантий - ставить соответствующий прокси и слать контролу сообщение об изменении параметров. Хотя, не знаю, будет ли это вообще работать.
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
Алексей К. писал(а):мы же меняем настройки дефолтного соединения - они соотв. едины в один срез времени для всех экземпляров браузера
Алексей К. писал(а):программная смена прокси (настройка интернет соединения):
Qwertiy писал(а):А если менять непосредственно нужный ключ в реестре?
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer, прокся"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 1, "REG_DWORD"
Алексей К. писал(а):опять же у нас один ключ на все экз. браузера будет для тек. пользователя
INTERNET_OPTION_PER_CONNECTION_OPTION
75
Sets or retrieves an INTERNET_PER_CONN_OPTION_LIST structure that specifies a list of options for a particular connection. This is used by InternetQueryOption and InternetSetOption. This option is only valid in Internet Explorer 5 and later.
Note INTERNET_OPTION_PER_CONNECTION_OPTION causes the settings to be changed on a system-wide basis when a NULL handle is used in the call to InternetSetOption. To refresh the global proxy settings, you must call InternetSetOption with the INTERNET_OPTION_REFRESH option flag.
Note To change proxy information for the entire process without affecting the global settings in Internet Explorer 5 and later, use this option on the handle that is returned from InternetOpen. The following code example changes the proxy for the whole process even though the HINTERNET handle is closed and is not used by any requests.
For more information and code examples, see KB article 226473.
Santa писал(а):После загрузки кода без отображения, как выдёргивать содержимое тегов с помощью getElementsByTagName или getElementByID, есть ли такая возможность у WinHTTPRequest?
iGrok писал(а):WHR только отдаст результат запроса в виде текста.
Santa писал(а):
iGrok писал(а):Вам что, заняться нечем?
Сказали же, используйте WinHTTPRequest. Там и прокси спокойно ставится, и в целом это более правильное решение.
Santa писал(а):Qwertiy писал(а):VB6 или более ранний?
VB5
Qwertiy писал(а):Если не ошибаюсь, шестой первый поддерживает юникод. Так что, в нём с этим не должно быть проблем.
Santa писал(а):решить так и не смог
iGrok писал(а):Возможно, кривой (битый) ответ от сервера приходит. Помимо ResponseText есть ещё ResponseBody, через который можно получить массив байт, и посмотреть, что же в нём не так.
iGrok писал(а):О как. Тогда возможно дело в том, что кодировка, возвращаемая сервером в заголовках, не соответствует реальной кодировке возвращаемых данных.
Dim b() As Byte
b = wr.ResponseBody
MsgBox StrConv(b, vbUnicode)
iGrok писал(а):
- Код: Выделить всё
Dim b() As Byte
b = wr.ResponseBody
MsgBox StrConv(b, vbUnicode)
Хакер писал(а):веб-мастер должен быть бит по морде
Private Const CP_UTF8 = 65001
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, lpWideCharStr As Any, ByVal cchWideChar As Long) As Long
Public Function Utf8ToUcs2(ByRef sInput As String) As String
Dim ret As Long
If Len(sInput) = 0 Then Exit Function Else Utf8ToUcs2 = Space(Len(sInput))
ret = MultiByteToWideChar(CP_UTF8, 0, _
ByVal StrPtr(sInput), Len(sInput), _
ByVal StrPtr(Utf8ToUcs2), LenB(Utf8ToUcs2))
If ret = 0 Then Error 51 Else Utf8ToUcs2 = Left$(Utf8ToUcs2, ret)
End Function
Public Function Utf8AsIsToUcs2(ByRef sAsIsBytes As String) As String
Dim ret As Long
Dim nInpLength As Long: nInpLength = LenB(sAsIsBytes)
If nInpLength = 0 Then Exit Function Else Utf8AsIsToUcs2 = Space(nInpLength)
ret = MultiByteToWideChar(CP_UTF8, 0, _
ByVal StrPtr(sAsIsBytes), nInpLength, _
ByVal StrPtr(Utf8AsIsToUcs2), nInpLength)
If ret = 0 Then Error 51 Else Utf8AsIsToUcs2 = Left$(Utf8AsIsToUcs2, ret)
End Function
Santa писал(а):Код страницы можно просто сохранить в файл, только вот как быть дальше? Как выдёргивать содержимое тегов с помощью getElementsByTagName или getElementByID!? Вот код, вот MSHTML, а что с ними делать? Если не сложно, ткните пальцем в нужное место(только не в глаз), узреть рабочий код очень хочется.
Dim RootDoc As IHTMLDocument3
Set RootDoc = New HTMLDocument
Dim psi As IPersistStreamInit
Set psi = RootDoc
Dim MarkupSvcAs IMarkupServices
Set MarkupSvc = RootDoc
Dim MrkupBegin As IMarkupPointer
Dim MrkupEnd As IMarkupPointer
MarkupSvc.CreateMarkupPointer MrkupBegin
MarkupSvc.CreateMarkupPointer MrkupEnd
Dim MrkupContainer as IMarkupContainer
MarkupSvc.ParseString strHtmlCode, 0, MrkupContainer, MrkupBegin, MrkupEnd
Сейчас этот форум просматривают: AhrefsBot, Google-бот, SemrushBot и гости: 69