J'essaie d'implémenter la fonctionnalité de téléchargement de fichiers dans l'application iPhone. Le code du serveur est testé et fonctionne lorsque les fichiers sont téléchargés à partir du navigateur du bureau, donc je suis passé à l'implémentation du code client Objective-C. J'assemble manuellement le corps des requêtes HTTP, et malgré cela il semble correct, il est rejeté par le serveur (le gestionnaire de serveur est incapable d'extraire les parties du contenu multipart). En désespoir de cause, j'ai simplifié le formulaire pour n'avoir qu'un seul paramètre, mais cela ne fonctionne toujours pas.Impossible d'assembler la requête multipart/form-data
J'ai capturé le trafic réseau et j'ai pu voir que Wireshark ne pouvait pas analyser mon contenu en multi-parties (regardez les captures d'écran: Firefox request, iPhone request). Je le colle ci-dessous dans l'espoir que vous pourriez voir les erreurs que je ne peux pas voir.
Merci d'avance.
Firefox:
POST /cubepaint/actions/gallery/post HTTP/1.1
Host: [...]
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Authorization: Basic [...]
Content-Type: multipart/form-data; boundary=---------------------------20072377098235644401115438165
Content-Length: 180
-----------------------------20072377098235644401115438165
Content-Disposition: form-data; name="deviceId"
12345
-----------------------------20072377098235644401115438165--
HTTP/1.1 200 OK
Date: Sat, 17 Oct 2009 22:09:21 GMT
Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 mod_ssl/2.2.3 OpenSSL/0.9.8c
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
iPhone:
POST /cubepaint/actions/gallery/post HTTP/1.1
Host: [...]
User-Agent: Copenhagen/1.0 CFNetwork/459 Darwin/9.8.0
Content-Type: multipart/form-data; boundary=----------0E7B16E6-CD3D-4213-9B42-07DA30822C74
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Authorization: Basic [...]
Content-Length: 187
Connection: keep-alive
----------0E7B16E6-CD3D-4213-9B42-07DA30822C74
Content-Disposition: form-data; name="deviceId"
00000000-0000-1000-8000-0016CBCC0B61
----------0E7B16E6-CD3D-4213-9B42-07DA30822C74--
HTTP/1.1 200 OK
Date: Sat, 17 Oct 2009 22:04:07 GMT
Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 mod_ssl/2.2.3 OpenSSL/0.9.8c
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Pourriez-vous regarder les captures d'écran affichées? Il y a CR/LF mis en évidence, peut-être que vous pouvez me donner un indice là-dessus. En outre, Content-Length semble être spécifié dans les deux versions, donc je ne suis pas sûr de ce que vous voulez dire par "ne spécifie pas une longueur". –
Je voulais dire "Keep-Alive: 300" - votre échantillon d'iPhone n'a pas une durée de conservation, même s'il spécifie "Connection: keep-alive" - on ne sait jamais, mais je ne pense pas que ce soit important assez pour provoquer la casse.Les captures d'écran que vous listez ici sont traitées par texto et formatées par SO et elles ont toutes l'air bien. Vous voudrez peut-être vérifier la sortie d'origine. Mais la première chose à essayer est de comparer la sortie de MobileSafari (ou ASIHTTPRequest) par rapport à votre code. – Ramin