Bruker Visual Basic VBA med HTTPS og SSL

Er det mulig å få tilgang til websider med HTTPS og som krever innlogging / passord ved bruk av Excel? Vel, ja og nei. Her er avtalen, og hvorfor den ikke er så rett frem.

Først, la oss definere vilkår

HTTPS er etter stevne identifikatoren for det som kalles SSL (Secure Sockets Layer). Det har egentlig ikke noe med passord eller innlogging å gjøre. Hva SSL gjør er å sette opp en kryptert forbindelse mellom en webklient og server, slik at det ikke sendes informasjon mellom de to "i klartekst" - ved bruk av ukryptert overføring. Hvis informasjonen inkluderer innloggings- og passordinformasjon, beskytter kryptering av overføringen dem mot nysgjerrige øyne... men kryptering av passord er ikke et krav. Jeg brukte uttrykket "etter konvensjon" fordi den virkelige sikkerhetsteknologien er SSL. HTTPS signaliserer bare til serveren som klienten planlegger å bruke den protokollen. SSL kan brukes på en rekke andre måter.

Så... hvis datamaskinen sender en URL til en server som bruker SSL og den URL-en begynner med HTTPS, sier datamaskinen til serveren:

instagram viewer

"Hei Mr. Server, la oss håndhilse over denne krypteringen, slik at hva vi sier fra nå av ikke blir oppfanget av en dårlig fyr. Og når det er gjort, kan du sende meg siden adressert av URL-adressen. "

Serveren vil sende tilbake nøkkelinformasjonen for å sette opp en SSL-forbindelse. Det er opp til datamaskinen din å faktisk gjøre noe med det.

Det er 'nøkkel' (ordspill... vel, sorta ment) for å forstå rollen som VBA i Excel. Programmeringen i VBA måtte faktisk ta neste steg og implementere SSL på klientsiden.

'Ekte' nettlesere gjør det automatisk og viser deg et lite låsesymbol på statuslinjen for å vise at det er gjort. Men hvis VBA nettopp åpner websiden som en fil og leser informasjonen i den i celler i et regneark (et veldig vanlig eksempel), vil ikke Excel gjøre det uten noen ekstra programmering. Serverens nådige tilbud om å håndhilse og sette opp sikker SSL-kommunikasjon blir bare ignorert av Excel.

Men du kan lese siden du ba om på nøyaktig samme måte

For å bevise det, la oss bruke SSL-tilkoblingen som brukes av Googles Gmail-tjeneste (som starter med "https") og kode en samtale for å åpne den forbindelsen, akkurat som om det var en fil.

Dette leser websiden som om det var en enkel fil. Siden nylige versjoner av Excel vil importere HTML automatisk, etter at Open-setningen er utført, importeres Gmail-siden (minus de dynamiske HTML-objektene) til et regneark. Målet med SSL-tilkoblinger er å utveksle informasjon, ikke bare lese en webside, så dette vil normalt ikke komme deg veldig langt.

For å gjøre mer, må du ha en måte i Excel VBA-programmet å støtte både SSL-protokollen og kanskje også å støtte DHTML. Du er sannsynligvis bedre med å starte med det fulle Visual Basic i stedet for Excel VBA. Bruk deretter kontroller som Internet Transfer API WinInet og ring Excel-objekter etter behov. Men det er mulig å bruke WinInet direkte fra et Excel VBA-program.

WinInet er et API - Application Programming Interface - til WinInet.dll. Den brukes hovedsakelig som en av hovedkomponentene i Internet Explorer, men du kan bruke den direkte fra koden din også, og du kan bruke den for HTTPS. Å skrive koden for å bruke WinInet er i det minste en middels vanskelig oppgave. Generelt er trinnene involvert:

  • Koble til HTTPS-serveren og send en HTTPS-forespørsel
  • Hvis serveren ber om et signert klientsertifikat, sender du forespørselen på nytt etter at sertifikatsammenheng er knyttet
  • Hvis serveren er fornøyd, blir økten autentisert

Det er to store forskjeller i å skrive WinInet-koden for å bruke https i stedet for den vanlige HTTP:

Du må også huske at funksjonen til å utveksle et innlogging / passord er logisk uavhengig av å kryptere økten ved hjelp av https og SSL. Du kan gjøre det ene eller det andre, eller begge deler. I mange tilfeller går de sammen, men ikke alltid. Og implementering av WinInet-kravene gjør ikke noe for å svare automatisk på en innloggings- / passordforespørsel. Hvis for eksempel innlogging og passord er en del av et nettskjema, kan det hende du må finne ut av navnene på feltene og oppdater feltene fra Excel VBA før du "posterer" påloggingsstrengen til server. Å svare riktig på en webserveren sikkerhet er en stor del av hva en nettleser gjør. På den annen side, hvis SSL-godkjenning er nødvendig, kan du vurdere å bruke InternetExplorer-objektet til å logge inn fra VBA ...

Hovedpoenget er at det er mulig å bruke https og logge på en server fra et Excel VBA-program, men ikke forvent å skrive koden som gjør det på bare noen få minutter.