Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Http request response als pdf speichern

Http request response als pdf speichern
10.07.2023 14:00:07
Bernhard

Hallo allerseits,


ich brüte schon seit einiger Zeit an folgendem Problem: Ich möchte über einen GET http Request ein PDF von unserem Buchhaltungsprogramm herunterladen.
Der unten angegebene Code funktionierte zum Download eines ZIP (gezippte PDF's) tadellos (natürlich mit entsprechend anderer URL). Der Download des PDF erzeugt auch keine Fehlermeldung, das PDF wird gespeichert, enthält jedoch keine Daten (Öffnen des PDF erfolgt mit folgender Fehlermeldung: Adobe Acrobat Reader konnte "RE-1578" nicht öffnen, da der Dateityp nicht unterstützt wird oder die Datei beschädigt ist). Mir ist aufgefallen das ResponseBody und ResponseText unterschiedlichen Inhalt haben (ResponseBody vom Datentyp Byte ? ResponseText vom Datentyp String ?).
Kann mir da eventuell jemand weiterhelfen ?

Grüße Bernhard
Function PDF_einlesen() ' Rechnungen / Mahnungen als PDF einlesen


' API Request

Dim ApiURL As String
Dim RequestString As String
Dim Resource As String
Dim InvoiceID As String
Dim HeadAuthorization As String
Dim HeadAccept As String
Dim HeadContent_type As String
Dim ValHeadAuth As String
Dim ValHeadAccept As String
Dim ValHeadContent_type As String
Dim Request As MSXML2.ServerXMLHTTP60
Dim iFileHandle As Integer

ApiURL = "https://my.xxxxxxx.de/api/v1/"
Resource = "Invoice"
InvoiceID = "55575144"
HeadAuthorization = "Authorization": ValHeadAuth = "xxxxxxxxxxxxxxxx"
HeadAccept = "Accept": ValHeadAccept = "application/xml"
HeadContent_type = "Content-type": ValHeadContent_type = "application/x-www-form-urlencoded"

RequestString = ApiURL & Resource & "/" & InvoiceID & "/getPdf" & "?"

Set Request = New ServerXMLHTTP60
Request.Open "GET", RequestString, False

Request.SetRequestHeader HeadAuthorization, ValHeadAuth
Request.SetRequestHeader HeadAccept, ValHeadAccept
Request.SetRequestHeader HeadContent_type, ValHeadContent_type

Request.Send

If Request.Status = 200 Then

Dim ostream As Object
Set ostream = CreateObject("ADODB.Stream")

ostream.Open
ostream.Type = 1 ' File überschreiben wenn es schon existiert !

ostream.Write Request.ResponseBody

ostream.savetofile "C:\Users\43664\Desktop\RE-1578.pdf", 2

ostream.Close
End If

Request.Abort

End Function

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Http request response als pdf speichern
10.07.2023 19:15:36
Ulf
Hi,
zum Test

Function PDF_einlesen() ' Rechnungen / Mahnungen als PDF einlesen
' API Request
    Dim ApiURL As String
    Dim RequestString As String
    Dim Resource As String
    Dim InvoiceID As String
    Dim HeadAuthorization As String
    Dim HeadAccept As String
    Dim HeadContent_type As String
    Dim ValHeadAuth As String
    Dim ValHeadAccept As String
    Dim ValHeadContent_type As String
    Dim Request As MSXML2.ServerXMLHTTP60
    Dim iFileHandle As Integer
ApiURL = "https://my.xxxxxxx.de/api/v1/"
    Resource = "Invoice"
    InvoiceID = "55575144"
    HeadAuthorization = "Authorization": ValHeadAuth = "xxxxxxxxxxxxxxxx"
    HeadAccept = "Accept": ValHeadAccept = "application/xml"
    HeadContent_type = "Content-type": ValHeadContent_type = "application/x-www-form-urlencoded"
    'Dort kommt ein PDF und kein Javascript, was vermutlich bei dir der Fall
RequestString = "https://www.press.bmwgroup.com/deutschland/article/attachment/T0273661DE/392973" 'ApiURL & Resource & "/" & InvoiceID & "/getPdf" & "?"
    
    Set Request = New ServerXMLHTTP60
    Request.Open "GET", RequestString, False
    Request.SetRequestHeader HeadAuthorization, ValHeadAuth
    Request.SetRequestHeader HeadAccept, ValHeadAccept
    Request.SetRequestHeader HeadContent_type, ValHeadContent_type
    Request.Send
    If Request.Status = 200 Then
        Dim ostream As Object
        Set ostream = CreateObject("ADODB.Stream")
        'Set ostream = New ADODB.Stream
        'Gibt eine Byte-Array
        Dim bBody As Variant
        bBody = Request.responseBody
        ostream.Open
        ostream.Type = 1 ' File überschreiben wenn es schon existiert !
        ostream.Write bBody 'Request.responseStream
        ostream.savetofile "C:\Users\43664\Desktop\RE-1578.pdf", 2
        ostream.Close
    End If
    Request.Abort
End Function
hth
Ulf


Anzeige
AW: Http request response als pdf speichern
10.07.2023 19:53:56
Bernhard
Hallo Ulf,

vielen Dank für Dein Beispiel ! Es ist mir sehr peinlich aber der Fehler lag auf meiner Seite. Ich hatte einen Key + Value vergessen (download = true). Der Download funktioniert auch mit Deiner Variante (mit der Variant Variable, aber auch direkt mit ostream.write request.responsebody).

Entschuldige und nochmal vielen Dank !!
Grüße Bernhard


Function PDF_einlesen() ' Rechnungen / Mahnungen als PDF einlesen

' API Request

Dim ApiURL                  As String
Dim RequestString           As String
Dim Resource                As String
Dim InvoiceID               As String
Dim Par1Inv                 As String
Dim Val1Inv                 As String
Dim HeadAuthorization       As String
Dim HeadAccept              As String
Dim HeadContent_type        As String
Dim ValHeadAuth             As String
Dim ValHeadAccept           As String
Dim ValHeadContent_type     As String
Dim ResponseTxt             As String
Dim BinaryTxt()             As Byte
Dim Request                 As MSXML2.ServerXMLHTTP60

ApiURL = "https://xxxxxxxxx/api/v1/"
Resource = "Invoice"
InvoiceID = "55575144"

Par1Inv = "download=": Val1Inv = "true"  ' Key + Value

HeadAuthorization = "Authorization": ValHeadAuth = "xxxxxxxxxxxxxxxxxxxxxxx"
HeadAccept = "Accept": ValHeadAccept = "application/xml"
HeadContent_type = "Content-type": ValHeadContent_type = "application/x-www-form-urlencoded"

RequestString = ApiURL & Resource & "/" & InvoiceID & "/getPdf" & "?" & Par1Inv & Val1Inv

Set Request = New ServerXMLHTTP60
Request.Open "GET", RequestString, False

Request.SetRequestHeader HeadAuthorization, ValHeadAuth
Request.SetRequestHeader HeadAccept, ValHeadAccept
Request.SetRequestHeader HeadContent_type, ValHeadContent_type

Request.Send

If Request.Status = 200 Then
    
    Dim ostream As Object
    Set ostream = CreateObject("ADODB.Stream")
    
    Dim Bbody As Variant
    Bbody = Request.ResponseBody
        
    ostream.Type = 1
    ostream.Open
       
    ostream.Write Bbody ' funktioniert auch mit ostream.Write Request.ResponseBody
    
    ostream.savetofile "C:\Users\43664\Desktop\RE-1578.pdf", 2 '(2: überschreibt ein existierendes PDF)

    ostream.Close
End If

Request.Abort

End Function


Anzeige
AW: Http request response als pdf speichern
10.07.2023 20:04:42
Ulf
Hi Bernhard
thx für die meldung und nicht nötig sich zu entschuldigen, hier muss ja keiner; xmlhttp hatte ich nicht mehr für VBA, hat mir auch genutzt.
WinWin
Grüße
Ulf

323 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige