VBA WinHTTP pour télécharger le fichier de mot de passe protégé site https

Je suis en train d'enregistrer un fichier de mot de passe https site protégé à l'aide de WinHTTP. Voici le code:

Sub SaveFileFromURL()

Dim FileNum As Long
Dim FileData() As Byte
Dim WHTTP As Object

fileUrl = "https://www.website.com/dir1/dir2/file.xls"
filePath = "C:\myfile.xls"

myuser = "username"
mypass = "password"

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

WHTTP.Open "GET", fileUrl, False
WHTTP.SetCredentials myuser, mypass, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
WHTTP.Send

FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

FileNum = FreeFile
Open filePath For Binary Access Write As #FileNum
    Put #FileNum, 1, FileData
Close #FileNum

MsgBox "File has been saved!", vbInformation, "Success"

End Sub

Le problème est avec l'authentification. Le fichier est sauvegardé, mais quand je l'ouvre dans Excel c'est juste le html page d'ouverture de session au lieu de la taille réelle du fichier. Si je copie le fichier directement url et la coller dans le navigateur addressbar et je ne suis pas connecté à la page web de l'effet est le même. Je me suis présenté à la page d'ouverture de session. Alors, si j'entre mon identifiant et mon mot de passe de la fenêtre de téléchargement s'affichera me permettant d'enregistrer le fichier.

Donc je pense que SetCredentials partie du code ne fonctionne pas correctement cause si je debug.imprimer WHTTP.ResponseBody c'est du code html à la place de la acutal fichier de données.

Est-il un moyen de passer l'id utilisateur et le mot de passe pour le WinHTTP pour que je puisse être en mesure de bien enregistrer le fichier?

Voici l'adresse de la page:

https://sst.msde.state.md.us/

=======================MODIFIER:========================

J'ai donc joué un peu avec elle aujourd'hui et je pense que je vais aller de l'avant. Voici ce que j'ai. Je Modyfied le code comme ceci:

Sub SaveFileFromURL()

Dim FileNum As Long
Dim FileData() As Byte
Dim WHTTP As Object

fileUrl = "https://www.website.com/dir1/dir2/file.xls"
filePath = "C:\myfile.xls"

myuser = "username"
mypass = "password"

strAuthenticate = "start-url=%2F&user=" & myuser & "&password=" & mypass & "&switch=Log+In"

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

WHTTP.Open "POST", fileUrl, False
WHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.Send strAuthenticate

WHTTP.Open "GET", fileUrl, False
WHTTP.Send

Debug.Print WHTTP.GetAllResponseHeaders()

FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

FileNum = FreeFile
Open filePath For Binary Access Write As #FileNum
    Put #FileNum, 1, FileData
Close #FileNum

MsgBox "File has been saved!", vbInformation, "Success"

End Sub

Quand Je Debug.Imprimer WHTTP.GetAllResponseHeaders (), j'ai par exemple:

Accept-Ranges: bytes
Content-Disposition: attachement; filename="xxx"
Content-Length: xxxxxx
Content-Type: application/octet-stream

Donc, je pense que l'authentification fonctionne, mais je ne peux toujours pas enregistrer le fichier. Quand je continue avec:

FileData = WHTTP.ResponseBody
Set WHTTP = Nothing

FileNum = FreeFile
Open filePath For Binary Access Write As #FileNum
    Put #FileNum, 1, FileData
Close #FileNum

Le contenu du fichier enregistré est la page html elle-même, mais pas le fichier.

Fait je ne l'authentification droite et le problème est avec l'enregistrement du fichier sur le disque ou encore est-il un problème avec l'authentification et c'est pourquoi je ne peux pas l'enregistrer? Toute indices?

SetCredentials ne semble pas très fiable. Vous pouvez utiliser un POST/GET méthode à la place.
Utilisation POST/GET, où/comment? Je l'utilise dans mon code juste avant de définir les informations d'identification, mais il ne fonctionne pas. Toutes les suggestions?
Cette réponse: stackoverflow.com/questions/891427/... peut être utile. A côté de cela, vous pouvez automatiser la page de connexion par IE, inscrivez votre nom d'utilisateur et le mot de passe, puis accédez à la page pour obtenir les informations dont vous avez besoin.
J'ai déjà automatisé de l'ouverture de session pour obtenir le fichier directement les url à la première place. Mais je veux être en mesure de télécharger le fichier "silencieusement", sans un pop-up de téléchargement de windows. Obtenir WHTTP.ResponseBody fonctionne très bien pour les autres nonpassprotected sites et pour certains passprotected http sites ainsi. Le problème, c'est avec ce site en https. Et BTW, j'ai utiliser IE pour celui-ci.
Edit: en Regardant le code html du site web que j'ai fourni est-il possible de comprendre quelle méthode doit être utilisée pour transmettre le nom d'utilisateur et le mot de passe et bien télécharger le fichier?

OriginalL'auteur user2267971 | 2014-02-26