2010-07-05 2 views
1

En C#, je travaille sur un projet de mise à jour automatique d'un serveur séparé avec une image et d'autres données de formulaire et autres ... Cependant, le serveur PHP ne reçoit aucun des données POST, cela ne fait qu'obtenir les en-têtes et je n'arrive pas à comprendre pourquoi.POST En-têtes envoyés mais non reçus sur le serveur

Voici ce que je vous envoie au serveur (toutes les nouvelles lignes ont CRLF):

POST /new_reply/1 HTTP/1.1 
Host: 192.168.1.104 
User-Agent: Update Bot 
Cookie: SID=sib5m5lgaq66vfp2nfhpab6ug0;UID=bot 
Content-Type: multipart/form-data; boundary=-----xxx 
Content-Length: 1903 

-----xxx 
Content-Disposition: form-data; name="form_sent" 

1 
-----xxx 
Content-Disposition: form-data; name="name" 


-----xxx 
Content-Disposition: form-data; name="body" 

hej fra mig 
-----xxx 
Content-Disposition: form-data; name="image"; filename="test.jpg" 
Content-Type: image/jpeg 

(image data) 
-----xxx 
Content-Disposition: form-data; name="post" 

Post 
-----xxx-- 

Voici l'image avec les personnages cachés montrent de la demande:

Voici la PHP print_r de _REQUEST $ sur la page/new_reply/1:

Array 
(
    [reply] => 1 
    [SID] => sib5m5lgaq66vfp2nfhpab6ug0 
    [UID] => bot 
) 

Comme vous pouvez le voir, aucun poste est à venir à travers ...

+0

Que contient '$ _FILES'? Le téléchargement du fichier est-il au moins terminé? – Charles

+0

Non, c'est complètement vide. – kevin

+0

Peut-être vérifier '$ HTTP_RAW_POST_DATA' pour voir si les données sont reçues, et c'est juste un problème avec PHP l'analyser. Il pourrait être vide pour diverses raisons, voir http://www.php.net/manual/fr/ini.core.php#ini.always-populate-raw-post-data. – tomit

Répondre

2

Je suis assez sûr que la limite spécifiée dans l'en-tête Content-Type est erronée. Il devrait être quelque chose comme ceci:

Content-Type: multipart/form-data; boundary=RANDOM_STRING_BOUNDARY 
--RANDOM_STRING_BOUNDARY 
Content-Disposition: form-data; name="image_name" 

Monkey 
--RANDOM_STRING_BOUNDARY 
Content-Disposition: form-data; name="photo"; filename="monkey.png" 
Content-Type: image/png 

[ here would be the png file in binary form ] 
--RANDOM_STRING_BOUNDARY-- 

Comme vous pouvez le voir, RANDOM_STRING_BOUNDARY n'a pas les traits d'union préfixé lorsque cela est spécifié dans l'en-tête Content-Type, seulement dans les en-têtes suivantes où il est effectivement utilisé. En outre, la dernière utilisation ajoute deux nouveaux traits d'union (mais vous le saviez déjà).

+0

Vous êtes un dieu. Merci beaucoup! – kevin

+0

Lui, j'ai été mordu par quelque chose de similaire. Pour moi, c'était les tirets manquants qui manquaient :) –

+0

J'avais un problème similaire, bien qu'il me semble que tout a une façon différente de formater le corps de la requête POST qui fonctionne d'une façon ou d'une autre jusqu'à ce qu'un être humain essaie de le générer seul . Le fait que vous n'ayez pas eu besoin des tirets dans le champ frontalier, et que vous avez ensuite fait semble être ce qui m'a fait trébucher. – TGP1994