Avatar billede tonika Nybegynder
19. december 2010 - 12:59 Der er 13 kommentarer og
1 løsning

vba http post xml

Hej,

Jeg forsøger at lave en simpel upload af en fil til en https side (asp), som forventer en xml fil. Jeg er godt klar over at VBA måske ikke lige normalt er den bedste vej frem til dette, men det nu ikke desto mindre det jeg skal.

Jeg har fået hul igennem med en helt alm. post request

HTTP.Open "POST", url, False
HTTP.SetCredentials user, pass, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER

HTTP.Send text

Men når jeg gør dette får jeg blot besked om, at serveren ønsker at modtage en xml fil. Jeg sender jo en tekst streng. Hvordan kan jeg så sende den afsted?
Avatar billede tjens Nybegynder
19. december 2010 - 21:13 #1
Hvilken type objekt er HTTP i din kode?

Se om dit HTTP-objekt kan sætte en mime-type "text/xml" i en header.
Og det kan også være nødvendigt med definition af charset, hvis det ikke er defineret i toppen af din xml-tekst.
Avatar billede tonika Nybegynder
20. december 2010 - 14:19 #2
Hej,

Tak for dit svar :)

Toppen af min xml fil indeholder følgende
<?xml version="1.0" encoding="ISO-8859-1"?>
<CirkulerendeAndele xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation = C:\DataIndsendelse\wwwroot\skemaer\CirkulerendeAndele.xsd>

Så det må vel være rigeligt? - Eller hvad?

Det objekt jeg får den omtalte fejl beskrivelse med er
Dim http As WinHttpRequest
Set http = New WinHttp.WinHttpRequest

Jeg har dog også prøvet mig frem med XMLHTTP, men det kunne jeg slet ikke få til at virke. Det jeg sender er jo en string og man kan vel heller ikke sende andet end en string med WinHttpRequest, eller hvad?

Tak for din hjælp!
Avatar billede tonika Nybegynder
20. december 2010 - 14:23 #3
Mere præcist er det dette svar jeg får:
<xmllog>
    <logtidspunkt>2010-12-20T14:20:47+01:00</logtidspunkt>
    <indsendelse>
        <tidspunkt>2010-12-20T14:20:47+01:00</tidspunkt>
        <indsenderid>unknown</indsenderid>
        <svarnummer>-2147221500</svarnummer>
        <svartekst>.OnXmlRaw: This service needs an XML file</svartekst>
        <transaktionstype>unknown</transaktionstype>
        <fremsendelsesdatotid></fremsendelsesdatotid>
    </indsendelse>
</xmllog>200

Når jeg sender en string fyldt med xml via WinHttpRequest.
Avatar billede tjens Nybegynder
20. december 2010 - 14:56 #4
Prøv med

HTTP.SetRequestHeader "CONTENT-TYPE","application/xml"

eller

HTTP.SetRequestHeader "CONTENT-TYPE","text/xml"

inden din HTTP.send
Avatar billede tonika Nybegynder
20. december 2010 - 15:41 #5
Hej,

Jeg har prøvet begge dele nu, og det er stadig samme svar jeg får.

Hvis jeg i stedet forsøger at sende "<hurra>hurra</hurra>" modtager jeg følgende:

<xmllog>
    <logtidspunkt>2010-12-20T15:39:53+01:00</logtidspunkt>
    <indsendelse>
        <tidspunkt>2010-12-20T15:39:53+01:00</tidspunkt>
        <indsenderid>unknown</indsenderid>
        <svarnummer>-2147221501</svarnummer>
        <svartekst>Unable to open key: hurra</svartekst>
        <transaktionstype>hurra</transaktionstype>
        <fremsendelsesdatotid>unknown</fremsendelsesdatotid>
    </indsendelse>
</xmllog>200

Har du en anden ide?
Avatar billede tjens Nybegynder
20. december 2010 - 16:07 #6
Din Hurra-test beviser jo, at der er hul igennem så teksten/XMLen bliver afleveret.

Så er næste skridt vel at finde dokumentation og eksempler på det nøjagtige XML layout, der skal sendes?

Måske forventer modtageren ikke start-tagget <?xml ...
men kun de rene data-tags
Avatar billede tonika Nybegynder
07. januar 2011 - 12:55 #7
hej igen,

Ja, den bliver leveret. Men spørgsmålet er hvordan jeg sender det som en xml-fil? - Og ikke som en string som det jo er nu. Den første svar besked jeg fik krævede jo en fil og ikke en string?
Avatar billede tjens Nybegynder
08. januar 2011 - 18:19 #8
Da HTTP er en tekstprotokol er der næppe forskel på en fil og en string.

Prøv at sende noget simpelt XML med det ønskede starttag og en smule mere a'la dette:

<CirkulerendeAndele><Andel id="123">SomeValue</Andel></CirkulerendeAndele>
Avatar billede tonika Nybegynder
11. januar 2011 - 10:08 #9
Hej igen,

Nå, men da jeg gjorde det fik jeg da en helt ny slags svar. Det er da altid noget :)
<xmllog>
    <logtidspunkt>2011-01-11T10:06:10+01:00</logtidspunkt>
    <indsendelse>
        <tidspunkt>2011-01-11T10:06:10+01:00</tidspunkt>
        <indsenderid>unknown</indsenderid>
        <svarnummer>-2147221499</svarnummer>
        <svartekst>Parse Error on XML:
XML Parse Error information:
Error Code: -1072898028
Error Reason: Element content is invalid according to the DTD/Schema.
Expecting: IndsenderID.

Line: 0
Line position: 0
Source: </svartekst>
        <transaktionstype>CirkulerendeAndele</transaktionstype>
        <fremsendelsesdatotid>unknown</fremsendelsesdatotid>
    </indsendelse>

Kan man så konkludere at der må være nogle alvorlige fejl i den fil jeg sender? - Siden den gerne vil anerkende din simple xml tekst.
Avatar billede tonika Nybegynder
11. januar 2011 - 10:53 #10
Hej igen,

Jeg tror problemet ligger i de variable som jeg gerne vil sende med i teksten. Hvis jeg sender teksten uden disse går det hele som smurt. Men jeg har jo netop lavet dette fordi det er smartere med de variable som jo så bare opdaterer sig selv med nye værdier.
Ved du hvordan jeg så kan gøre det? - Jeg erklærer jo naturligvis min variabel tidligere uden for denne tekst. Og indsætter den så således & variabel & og så går det hele galt :(
Jeg har også lavet en funktion som returnerer det hele i en string og som indeholdt det hele og kaldt denne i stedet i håbet om, at den efter kaldet vil have fortolket værdierne og blot indsat dem som tekst. Men også dette vil den ikke anerkende som xml.
Avatar billede tjens Nybegynder
11. januar 2011 - 14:01 #11
Prøv at skrive din text-variabel til en diskfil / logfil på serveren.
Så kan du nemmere checke om det er den XML du forventer, der bliver bygget op.

Eller vis den VB-kode der danner XML-teksten i dit program her.
Avatar billede tonika Nybegynder
11. januar 2011 - 14:15 #12
Jeg vil lige sige tusind tak for din hjælp. Synes du har været ekstremt tålmodig med mig :)

Men nu har jeg sendt den videre til suppoporten hos modtageren. Det med variablen fik jeg til at fungere alligevel.
Avatar billede tonika Nybegynder
11. januar 2011 - 14:16 #13
Så smid et svar hvis du vil have dine hårdt tjente point :)
Avatar billede tjens Nybegynder
11. januar 2011 - 14:43 #14
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udviklings- og Forenklingsstyrelsen

Tech Lead til Java-backend udviklingsteam

AURA A/S

Data Engineer

Euronext Securities

Software Developer

Udviklings- og Forenklingsstyrelsen

Erfaren teamleder til årsopgørelsen