Загрузить PDF-файл по URL-адресу в Excel VBA - PullRequest
0 голосов
/ 07 мая 2020

пытается загрузить PDF-файл по URL-адресу. Кажется, я не могу пройти мимо экрана входа в систему, поскольку загруженный PDF-файл содержит только код для страницы входа, если я открою его в Блокноте. Я проверил почтовый запрос после входа в систему вручную и вставил его после «FormData». Я не уверен, имеет ли значение то, что я назвал этой переменной? В одном из сообщений, на которые я ссылаюсь ниже, он использовал "strAuthenticate".

Когда я просматриваю PDF-файл, который я хочу загрузить, в chrome DevTools, он говорит следующее:

<embed id="plugin" type="application/x-google-chrome-pdf"                                 
src="***SAME AS FILE URL IN VBA CODE***" 
stream-url="chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/761e8d06-3486-4bab-b043-df5b9a3c2510"     headers="accept-ranges: bytes
cache-control: max-age=1, must-revalidate
content-length: 375845
content-type: application/pdf
date: Wed, 06 May 2020 23:35:10 GMT
etag: 1588701484391
expires: Thu, 07 May 2020 00:35:10 GMT
last-modified: Tue, 05 May 2020 17:58:04 GMT
p3p: policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;NON DSP CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT&quot;
server: Microsoft-IIS/10.0
status: 200
x-content-type-options: nosniff
x-included-test: true
" background-color="0xFF525659" top-toolbar-height="56" javascript="allow" full-frame="">

Имеет ли значение, что PDF-файл является плагином, а не вложением. Также sr c - это сайт, который у меня есть в fileUrl в приведенном ниже коде.

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

mainUrl = "https://www.website.com/j_security_check"
fileUrl = "https://www.website.com.com/controlFileRetrieve?ignorePresentViaObject=true&curDomId=111&posId=4574137"
filePath = "C:\myfile.pdf"

myuser = "xxxxxx"
mypass = "xxxxxx"

j_security_check = "j_username=" & myuser & "j_password=" & mypass

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


WHTTP.Open "POST", mainUrl, False 'WHTTP.Open "POST", fileUrl, False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.send j_security_check


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

Ссылки, на которые я ссылался или на которые я смотрел:

VBA WinHTTP для загрузки файла с защищенного паролем веб-сайта https

Как сделать запрос POST на страницу, которая может перенаправить на страницу входа

Любая помощь приветствуется!

1 Ответ

1 голос
/ 07 мая 2020

У меня работает.

Sub TryMe()
    Dim i As Long
    Dim FileNum As Long
    Dim FileData() As Byte
    Dim MyFile As String
    Dim WHTTP As Object
    Dim lrow As Long
    Dim ws As Excel.Worksheet

    On Error Resume Next
        Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5")
        If Err.Number <> 0 Then
            Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
        End If
    On Error GoTo 0

    If Dir("C:\MyDownloads", vbDirectory) = Empty Then MkDir "C:\MyDownloads"

    Set ws = ThisWorkbook.Worksheets("Sheet1")

    With ws
        For lrow = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
            MyFile = Cells(lrow, 1).Text
            TempFile = Right(MyFile, InStr(1, StrReverse(MyFile), "/") - 1)
            WHTTP.Open "GET", MyFile, False
            WHTTP.Send
            FileData = WHTTP.ResponseBody

            FileNum = FreeFile
            Open "C:\MyDownloads\" & TempFile For Binary Access Write As #FileNum
                Put #FileNum, 1, FileData
            Close #FileNum
            DoEvents
        Next lrow
    End With

    Set WHTTP = Nothing
    MsgBox "Open the folder [ C:\MyDownloads ] for the downloaded file..."
End Sub

Настройка:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...