---
title: "Skicka data och fil med ServerXMLHTTP"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/135232-skicka-data-och-fil-med-serverxmlhttp"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Dred"
published: "2005-10-04T15:25:25.000Z"
updated: "2005-10-09T01:12:30.000Z"
replies: 14
views: 465
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/135232-skicka-data-och-fil-med-serverxmlhttp"
---

# Skicka data och fil med ServerXMLHTTP

## #1 — Dred, 2005-10-04T15:25Z

Jag ska skicka 2 parametrar och en zip-fil mot en server från min sida. Mottagande server kräver av mig parametrarna "username" och "password" med sina respektive värden och en zip-fil. Jag har gjort enligt nedanstående för att försöka skicka parametrarna först (utan filen till att börja med) men mottagande server hittar inte dessa. Vad gör jag för fel? och när det är löst, hur skickar jag zip-filen i samma request? Jag vet att parametrarna går att skicka i headern men det vill jag inte göra eftersom zip-filen också ska skickas och då är det lika bra att skicka allt i bodyn.

```
theBoundary = "-----my.Very.Unique.boundary-----"

Set xh=CreateObject("MSXML2.ServerXMLHTTP")
theUrl = "https://www.myserver.com/myservice.php"

theBody = ""
theBody = theBody & theBoundary
theBody = theBody & "Content-Disposition: form-data; name=""username"";" + vbCrLf + vbCrLf
theBody = theBody & "myusername"
theBody = theBody & theBoundary
theBody = theBody & "Content-Disposition: form-data; name=""password"";" + vbCrLf + vbCrLf
theBody = theBody & "mypass"
theBody = theBody & theBoundary
theBody = Server.urlencode(theBody)

xh.open "POST", theUrl, False 
xh.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + theBoundary
xh.send(theBody)

Response.write(xh.responseText)
Set xh = Nothing
```

Mycket tacksam för hjälp!

Permalänk: https://www.webforum.nu/p/135232

## #2 — Erik Juhlin, 2005-10-04T19:36Z

Ett tips är att använda ett program typ HttpWatch för att se hur filer skickas tillsammans med annan data vid vanliga uppladdningar. Eftersom du verkar ha ganska bra koll så borde du kunna kopiera hur webbläsaren skickar datat.

En sak jag funderar lite på när jag ser din kod är att du URLEncodat bodyn du skickar. Ska man verkligen göra det när man skickar fildata? Vid en vanlig POST så gör man ju det, men vid filuppladdning?
Jag hoppas i alla fall inte det, blir ganska mycket mer data att skicka då. :)

Permalänk: https://www.webforum.nu/p/1681404

## #3 — emission, 2005-10-04T21:46Z

Nej, man ska inte URL-encoda (vid en vanlig post är Content-Type= application/x-www-form-urlencoded). Filen skickar du på samma sätt som form-elementen, men kompletterar med attributen "filename" och "Content-Type", och därefter själva fildatat som en ström av bytes (ADODB.Stream-klassen kan tänkas vara användbar).

Permalänk: https://www.webforum.nu/p/1681461

## #4 — Dred, 2005-10-04T21:57Z

Ok, urlencodningen lade jag till egentligen i desperation. Men om jag ska skicka båda parametrarna och filen i samma request, behöver jag då inte ha en Content-Type som är multipart/form-data? Om du kan modifiera min kod ovan så vore jag oerhört tacksam.

Permalänk: https://www.webforum.nu/p/1681469

## #5 — emission, 2005-10-04T23:11Z

Här finns ett exempel

<http://www.pstruh.cz/tips/detpg_uploadvbsie/>

Det är förvisso klient-baserat, men principerna finns där...

Permalänk: https://www.webforum.nu/p/1681484

## #6 — Erik Juhlin, 2005-10-05T07:01Z

emission: Den visar ju bara hur filer laddas upp. Inte hur vanlig data skickas.

Borde man inte kunna skriva ungefär så här...

```
theBody = _
	theBoundary & vbCrLf & _
	"Content-Disposition: form-data; name=""username""" & vbCrLf & _
	vbCrLf & _
	"myusername" & vbCrLf & _
	theBoundary & vbCrLf & _
	"Content-Disposition: form-data; name=""password""" & vbCrLf & _
	vbCrLf & _
	"mypass" & vbCrLf & _
	theBoundary & vbCrLf & _
	"Content-Disposition: form-data; name=""thefile""; filename=""C:\fil.zip""" & vbCrLf & _
	"Content-Type: application/x-zip-compressed" & vbCrLf & _
	vbCrLf & _
	"fildatat" & vbCrLf & _
	theBoundary & vbCrLf
```

Sen får man väl göra det på något snyggare sätt än att bara konkatenera en massa när man har stora filer man ska skicka...

Permalänk: https://www.webforum.nu/p/1681524

## #7 — Dred, 2005-10-05T09:09Z

Ok, men om vi struntar i filen ett tag och försöker bara få formdatat (user och pass) att komma in rätt i bodyn. Menar ni att bodyn är rätt formatterad? Misstänker att den inte är det eftersom mottagande server inte ser någon formdata alls. Är det också ok att jag använder multipart/form-data som Content-Type?  En annan märklig grej som jag upptäckte också är att när jag kör Ethereal och analyserar requesten så ser jag att det blir en GET ocn inte en POST! Hur kommer det sig?!

Permalänk: https://www.webforum.nu/p/1681549

## #8 — Erik Juhlin, 2005-10-05T10:46Z

Din body såg hyfsat rätt formaterad, men det var nåt semikolon för mycket och saknades lite radbrytningar.
Kolla på det jag skrivit ihop.

Att det blir en GET verkar mycket konstigt. Vad är Ethereal för något?

Permalänk: https://www.webforum.nu/p/1681590

## #9 — emission, 2005-10-05T11:32Z

> **Erik Juhlin skrev:**
>
> Vad är Ethereal för något?

Ett suveränt paketanalysprogram, typ HttpWatch. Rekommenderas varmt.

Permalänk: https://www.webforum.nu/p/1681596

## #10 — Dred, 2005-10-05T14:48Z

Jag har testat igen med föreslagen kod, men det funkar i alla fall inte (mottagande server får ingen formdata). Och tittar jag i ethereal så ser jag att requesten skickas som GET, mottagande server säger att den får en POST. Fattar ingenting!

Permalänk: https://www.webforum.nu/p/1681686

## #11 — Erik Juhlin, 2005-10-05T17:11Z

Jag gissar att det är Ethreal som har fel. Men att servern som tar emot inte får någonting verkar konstigt...

Permalänk: https://www.webforum.nu/p/1681730

## #12 — Dred, 2005-10-06T08:24Z

Ethereal hade inte fel, det var fel på min hjärna, jag sniffade nätet från fel maskin. Hur som helst, POSTen skickas helt ok, men mottagande server får alltså inga formparametrar. Så felet måste ändå ligga i hur jag formatterar requesten. Såhär ser koden ut just nu:

```
theBoundary = "---------------mbition.com.boundary"

set xh=createobject("MSXML2.ServerXMLHTTP")
theUrl = "http://www.myserver.com/test.php"

theBody = _
	theBoundary & vbCrLf & _
	"Content-Disposition: form-data; name=""username""" & vbCrLf & _
	vbCrLf & _
	"myusername" & vbCrLf & _
	theBoundary & vbCrLf & _
	"Content-Disposition: form-data; name=""password""" & vbCrLf & _
	vbCrLf & _
	"mypass" & vbCrLf & _
	theBoundary & vbCrLf & "--"

xh.open "POST", theUrl, false 
xh.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + theBoundary
xh.send(theBody)

response.write(xh.responseText)

set xh = Nothing
```

Skriver jag ut theBody får jag följande:

```
---------------mbition.com.boundary Content-Disposition: form-data; name="username" myusername ---------------mbition.com.boundary Content-Disposition: form-data; name="password" mypass ---------------mbition.com.boundary --
```

Kan någon se något konstigt?

Permalänk: https://www.webforum.nu/p/1681903

## #13 — Erik Juhlin, 2005-10-06T09:38Z

Inga radbrytningar? Men jag antar att det är för att du skriver ut det på en HTML-sida.
Ta View Source och kopiera därifrån så man kan se radbrytningarna också.

Permalänk: https://www.webforum.nu/p/1681919

## #14 — Dred, 2005-10-06T12:22Z

Såhär ser det ut när man tar view source:

```
---------------mbition.com.boundary
Content-Disposition: form-data; name="username"

myusername
---------------mbition.com.boundary
Content-Disposition: form-data; name="password"

mypass
---------------mbition.com.boundary
--
```

Permalänk: https://www.webforum.nu/p/1681960

## #15 — Dred, 2005-10-09T01:12Z

Kunde någon se något konstigt med bodyn ovan?

Permalänk: https://www.webforum.nu/p/1682791

---

Tråden på webben: https://www.webforum.nu/amne/asp/135232-skicka-data-och-fil-med-serverxmlhttp
