Χρησιμοποιώντας Visual Basic VBA με HTTPS και SSL

Είναι δυνατή η πρόσβαση σε ιστοσελίδες με HTTPS και που απαιτούν login / password χρησιμοποιώντας το Excel; Λοιπόν, ναι και όχι. Εδώ είναι η συμφωνία και γιατί δεν είναι τόσο ευθεία προς τα εμπρός.

Πρώτον, Ας ορίσουμε τους Όρους

HTTPS είναι με σύμβαση το αναγνωριστικό για το λεγόμενο SSL (Secure Sockets Layer). Αυτό δεν έχει τίποτα να κάνει με τους κωδικούς πρόσβασης ή τους συνδέσμους ως τέτοιο. Αυτό που κάνει το SSL είναι η δημιουργία κρυπτογραφημένης σύνδεσης μεταξύ ενός προγράμματος-πελάτη ιστού και ενός διακομιστή, ώστε να μην αποστέλλονται πληροφορίες μεταξύ των δύο "στο σαφές" - χρησιμοποιώντας μη κρυπτογραφημένες μεταδόσεις. Εάν οι πληροφορίες περιλαμβάνουν πληροφορίες σύνδεσης και κωδικού πρόσβασης, η κρυπτογράφηση της μετάδοσης τους προστατεύει από τα αδιάκριτα μάτια... αλλά οι κωδικοί κρυπτογράφησης δεν είναι απαίτηση. Χρησιμοποίησα τη φράση "κατά σύμβαση" επειδή η πραγματική τεχνολογία ασφάλειας είναι SSL. Το HTTPS σηματοδοτεί μόνο στο διακομιστή που σχεδιάζει ο πελάτης χρησιμοποιώντας το πρωτόκολλο αυτό. Το SSL μπορεί να χρησιμοποιηθεί με διάφορους άλλους τρόπους.

instagram viewer

Έτσι... εάν ο υπολογιστής σας στέλνει μια διεύθυνση URL σε ένα διακομιστή που χρησιμοποιεί SSL και η διεύθυνση URL ξεκινά με το HTTPS, ο υπολογιστής σας λέει στον διακομιστή:

"Γεια σου, κύριε Server, ας κουνήσουμε τα χέρια πάνω σε αυτό το πράγμα κρυπτογράφησης, έτσι ώστε ό, τι λέμε από τώρα και στο εξής, δεν θα παρασυρθούν από κάποιο κακό. Και όταν αυτό γίνει, προχωρήστε και στείλτε μου τη σελίδα που σας απηύθυνε η διεύθυνση URL. "

Ο διακομιστής θα στείλει ξανά τις πληροφορίες κλειδιού για τη ρύθμιση μιας σύνδεσης SSL. Εναπόκειται στον υπολογιστή σας να κάνει πραγματικά κάτι με αυτό.

Αυτό είναι «κλειδί» (λέξη... καλά, sorta προορίζεται) στην κατανόηση του ρόλου του VBA στο Excel. Ο προγραμματισμός στο VBA θα έπρεπε να κάνει το επόμενο βήμα και να εφαρμόσει το SSL στην πλευρά του πελάτη.

Τα "πραγματικά" προγράμματα περιήγησης ιστού κάνουν αυτόματα και σας δείχνουν ένα μικρό σύμβολο κλειδώματος στη γραμμή κατάστασης για να σας δείξει ότι έχει γίνει. Αλλά αν το VBA μόλις ανοίξει την ιστοσελίδα ως αρχείο και διαβάσει τις πληροφορίες σε αυτό σε κελιά σε ένα υπολογιστικό φύλλο (ένα πολύ συνηθισμένο παράδειγμα), το Excel δεν θα το κάνει χωρίς κάποιο πρόσθετο προγραμματισμό. Η ευγενική προσφορά του διακομιστή να σφίξει τα χέρια και να ρυθμίσει ασφαλή επικοινωνία SSL απλώς αγνοείται από το Excel.

Αλλά μπορείτε να διαβάσετε την σελίδα που ζητήσατε ακριβώς στον ίδιο τρόπο

Για να το αποδείξουμε, ας χρησιμοποιήσουμε τη σύνδεση SSL που χρησιμοποιείται από την υπηρεσία Gmail της Google (η οποία αρχίζει με "https") και κωδικοποιεί μια κλήση για να ανοίξει τη συγκεκριμένη σύνδεση ακριβώς όπως ήταν ένα αρχείο.

Αυτό διαβάζει την ιστοσελίδα σαν να ήταν ένα απλό αρχείο. Δεδομένου ότι οι πρόσφατες εκδόσεις του Excel θα εισαγάγουν αυτόματα το HTML, μετά την εκτέλεση της εντολής Άνοιγμα, η σελίδα του Gmail (μείον τα αντικείμενα Dynamic HTML) εισάγεται σε ένα υπολογιστικό φύλλο. Ο στόχος των συνδέσεων SSL είναι η ανταλλαγή πληροφοριών, όχι μόνο η ανάγνωση μιας ιστοσελίδας, γι 'αυτό συνήθως δεν πρόκειται να φτάσετε πολύ μακριά.

Για να κάνετε περισσότερα, πρέπει να έχετε κάποιο τρόπο, στο πρόγραμμα VBA του Excel, για να υποστηρίξετε και το πρωτόκολλο SSL και ίσως να υποστηρίξετε επίσης το DHTML. Πιθανότατα καλύτερα να ξεκινάτε από το πλήρες Visual Basic αντί του Excel VBA. Στη συνέχεια, χρησιμοποιήστε στοιχεία ελέγχου όπως το WinInet API μεταφοράς δεδομένων και καλέστε αντικείμενα του Excel όπως απαιτείται. Αλλά είναι δυνατό να χρησιμοποιήσετε το WinInet απευθείας από ένα πρόγραμμα Excel VBA.

Το WinInet είναι ένα API - Διεπαφή Προγραμματισμού Εφαρμογών - στο WinInet.dll. Χρησιμοποιείται κυρίως ως ένα από τα βασικά συστατικά του Internet Explorer, αλλά μπορείτε να το χρησιμοποιήσετε απευθείας από τον κώδικα σας και μπορείτε να το χρησιμοποιήσετε για το HTTPS. Η σύνταξη του κώδικα για τη χρήση του WinInet είναι τουλάχιστον μια μεσαία δυσκολία. Γενικά, τα σχετικά βήματα είναι:

  • Συνδεθείτε στο διακομιστή HTTPS και στείλτε ένα αίτημα HTTPS
  • Εάν ο διακομιστής ζητά ένα υπογεγραμμένο πιστοποιητικό πελάτη, στείλτε ξανά το αίτημα μετά την επισύναψη του πλαισίου πιστοποιητικών
  • Εάν ο διακομιστής ικανοποιηθεί, η περίοδος σύνδεσης επαληθεύεται

Υπάρχουν δύο μεγάλες διαφορές στη συγγραφή του κώδικα WinInet για τη χρήση του https αντί για το κανονικό HTTP:

Θα πρέπει επίσης να έχετε κατά νου ότι η λειτουργία ανταλλαγής συνδέσμου / κωδικού πρόσβασης είναι λογικά ανεξάρτητη από την κρυπτογράφηση της περιόδου σύνδεσης με τη χρήση https και SSL. Μπορείτε να κάνετε το ένα ή το άλλο, ή και τα δύο. Σε πολλές περιπτώσεις, πάνε μαζί, αλλά όχι πάντα. Και η εφαρμογή των απαιτήσεων του WinInet δεν κάνει τίποτα για να ανταποκριθεί αυτόματα σε ένα αίτημα σύνδεσης / κωδικού πρόσβασης. Εάν, για παράδειγμα, η σύνδεση και ο κωδικός πρόσβασης αποτελούν μέρος μιας φόρμας ιστού, τότε ίσως χρειαστεί να υπολογίσετε το ονόματα των πεδίων και να ενημερώσετε τα πεδία από το Excel VBA πριν "καταχωρήσετε" τη συμβολοσειρά σύνδεσης στο υπηρέτης. Η σωστή απάντηση στην ασφάλεια ενός διακομιστή ιστού είναι ένα μεγάλο μέρος του τι κάνει ο περιηγητής ιστού. Από την άλλη πλευρά, εάν απαιτείται έλεγχος ταυτότητας SSL, μπορείτε να χρησιμοποιήσετε το αντικείμενο InternetExplorer για να συνδεθείτε από μέσα VBA ...

Η κατώτατη γραμμή είναι ότι η χρήση του https και η σύνδεση σε ένα διακομιστή από ένα πρόγραμμα Excel VBA είναι δυνατή, αλλά μην περιμένετε να γράψετε τον κώδικα που το κάνει σε λίγα λεπτά.

instagram story viewer