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.
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å. :)
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).
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.
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?!
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!
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:
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å.