vLaDdO96 Posted November 3, 2010 Report Posted November 3, 2010 Acum o sa va ajut / invat cum sa facem un WebBrowser ce foloseste Proxy. O sa explit fiecare rand din cod.- Deci, ce este un WebBrowser ? un Browser, este acel software ce ajuta la primirea / trimiterea datelor pe internet. Ceva in gen : Internet explorer, Mozilla, Google Chrome, Opera si asa mai departe. Vom vedea ca in VB.Net, WebBrowserul are la baza engine-ul (motorul) al IE-ului (Internet Explorer).- Ce este un proxy ? Un server proxy este un server (un computer sau o aplicatie software) care actioneaza ca un intermediar intre requestul unui client utilizator (persoanele ce folosesc proxy) si un server. Mai simplu, o adresa proxy este o 'masca' a propriului IP, pentru ca noi sa nu fim identificati pe internet.[ I ] Design.1. Creati un proiect nou, il numiti cum vreti, de preferabil ceva apropiat "WebBrowser".2. Faceti un Form putin mai mare decat cel default.3. a) Introduceti un WebBrowser in Form. Asigurati-va ca nu este selectata optiunea "Dock in parent container". Nu de alta, dar dupa butoanele o sa fie suprapuse peste pagina web, si o sa arate urat. Si, ca sa arate cat mai frumos, aduceti marginile WebBrowserului cat mai aproape de linia Form-ului, lasand un spatiu sus, pentru butoane.* Hint : ca sa puteti trage de marginea WebBrowser-ului fara sa intampinati greutati, sau sa se 'lipeasca' singur de margine lasand acel mic spatiu, tineti apasat ALT si trageti. Click (unul singur, nu dublu-click) pe WebBrowser si in dreapta, la proprietati, selectati "Anchor : Top, Bottom, Left, Right"c) Adaugati sase (6) butoane si doua textbox-uri.(TextBox1 = URL / TextBox2 = Proxy)[ II ] Coding1. Mergem la fila Form1.vb - cea cu codurile.a) deasupra oricarei linii de cod, deasupra "Public Class Form1", introducem codul urmator :Imports System.Runtime.InteropServices- "System.Runtime.InteropServices" - ofera o colectie de metode de alocare de memorie negestionata, copierea block-urilor de memorie negestionata, conversia memoriei precum si alte metode folosite in interactiunea cu tipuri de memorie. Ca orice functie noua, audaugam codul urmator :<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- "<Runtime.InteropServices.DllImport("wininet.dll", SetLastError:=True)>" - importa dll-ul (dynamic library link) "wininet.dll"- "Private Shared Function InternetSetOption" - creeaza o noua functie numita "InternetSetOption"c) ca la pasul precedent, adaugam o structura noua :Public Structure Struct_INTERNET_PROXY_INFO Public dwAccessType As Integer Public proxy As IntPtr Public proxyBypass As IntPtr End Structure- "Public Structure Struct_INTERNET_PROXY_INFO" - am creat structura "Struct_INTERNET_PROXY_INFO"- "Public dwAccessType As Integer" - declaram dsAccessType ca fiind integer- "Public proxy As IntPtr" - declaram proxy ca fiind IntPtr - ce este acest IntPtr ? este un tip specific platformei care este folosit pentru a reprezenta un indicator sau o manevrare. daca ne uitam mai atent la acest IntPtr, a ce seamana ? a integer + pointer- "Public proxyBypass As IntPtr" - declaram proxyBypass ca fiind IntPtr (explicat un rand mai sus)d) la fel, adaugam inca o functie : Private Sub RefreshIESettings(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 RefreshIESettings" - creearea comenzii "RefreshIESettings"- "(ByVal strProxy As String)" - declararea de la inceputul functiei a "strProxy" ca string- "Const INTERNET_OPTION_PROXY As Integer = 38" - declararea constantei "INTERNET_OPTION_PROXY" ca integer = 38- "Const INTERNET_OPEN_TYPE_PROXY As Integer = 3" - declararea constantei "INTERNET_OPEN_TYPE_PROXY" ca integer = 3- "Dim struct_IPI As Struct_INTERNET_PROXY_INFO" - declararea "struct_IPI" ca fiind "Struct_INTERNET_PROXY_INFO" = o structura a informatiei proxy-ului- "struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY" - egalarea structurii IPI de acces cu "INTERNET_OPEN_TYPE_PROXY" = proxy de tip deschis- "struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy)" - egalarea structurii IPI de proxy cu "Marshal.StringToHGlobalAnsi(strProxy)" - Marshal, la fel ca IntPtr, se ocupa cu memoria (daca ati uitat <deja> citit putin mai sus la IntPtr); "StringToHGlobalAnsi(strProxy)" - conversia de la string la global ansi a strProxy-ului.- "struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local")" - egalarea structurii IPI de proxy bypass cu "Marshal.StringToHGlobalAnsi("local")" - cum as putea zice eu mai simplu ... conversia string to global ansi in mod "local" prin managementul memoriei. nu-i asa ca este simplu ? ...- "Dim intptrStruct As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI))" - declararea intptrStruct (structurii integer+pointer) ca IntPtr (integer+pointer), egala cu "Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI)" - prin functia Marshal de management al memoriei, alocarea acesteia la "Marshal.SizeOf(struct_IPI)" - SizeOf = marimea structurii IPI (struct_IPI) - definita mai sus.- "Marshal.StructureToPtr(struct_IPI, intptrStruct, True)" - prin functia Marshal, structura catre pointer (StructureToPtr) este setata astfel : structura IPI (struct_IPI) catre structura integer to pointer (intptrStruct) este adevarata (True)- "Dim iReturn As Boolean = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, _intptrStruct, System.Runtime.InteropServices.Marshal.SizeOf(struct_IPI))" - definirea iReturn ca fiind Boolean (boolean este un sistem complex pentru operatiile logice), egal cu "InternetSetOption" - comanda care seteaza optiunile engine-ului browser-ului- "(IntPtr.Zero, INTERNET_OPTION_PROXY, _intptrStruct, System.Runtime.InteropServices.Marshal.SizeOf(struct_IPI))" - aici IntPtr.Zero, optiunea proxy a engine-ului, structura integer to pointer, iau marimea structurii IPI prin managementul memoriei realizat de "System.Runtime.InteropServices.Marshal.SizeOf"e) am terminat cu ce era mai greu. acum sa trecem la lucrurile usoare. pentru inceput, dublu click pe Button1 (Go), si introducem urmatoarele :WebBrowser1.Navigate(TextBox1.Text)- "WebBrowser1.Navigate" - da comanda de navigare catre WebBrowser- "(TextBox1.Text)" - WebBrowser-ul va naviga in textul introdus in TextBox1.f) dublu-click pe Button2 (Refresh) si introduceti codul urmator :WebBrowser1.Refresh()- da comanda de Refresh() catre Browserg) dublu-click pe Button3 (Back)WebBrowser1.GoBack()- da comanda Browser-ului sa mearga inapoi la pagina precedentah) dublu-click pe BUtton4 (Forward)WebBrowser1.GoForward()- da comanda Browser-ului sa mearga la pagina din fata (atunci cand ati fost pe o pagina, ati dat Back si vreti inapoi pe pagina aceea)i) acum, dublu click pe Button5 (Set proxy)RefreshIESettings(TextBox2.Text) WebBrowser1.Refresh()- "RefreshIESettings" - va mai aduceti aminte de el ? este functia aceea imensa. asadar, ce face? prin toate liniile acelea de cod din aceasta functie, ea seteaza proxy-ul- "(TextBox2.Text)" - este sursa proxy-ului- "WebBrowser1.Refresh()" - dupa setarea proxy-ului, paginii i-a fost dat un refresh, pentru a se seta in totalitate. (pentru a nu fi nevoie de un manual refresh)j) dublu click pe Button6 (Delete proxy)RefreshIESettings(":") WebBrowser1.Refresh()- "RefreshIESettings" - la fel, seteaza proxy-ul- "(":")" - ce inseamna ? la proxy, este ip:port - aici este nimic:nimic. de ce nul la nul ? pentru a reseta proxy-ul, deci pentru a-l sterge si pentru a merge pe adresa voastra IP. Felicitari, sunteti gata cu un WebBrowser ce foloseste Proxy !Copyright tut © pr00f = eu/edit : scuze pentru stricarea paginii 1 Quote