Bonsoir,

je viens ici pour vous demander de l'aide à propos de l'upload d'un fichier depuis un programme écrit en C++ vers un serveur (réception HTML/PHP).

Je me suis déjà grandement inspiré du tuto du site de cURL ainsi que d'autres sur Internet mais rien n'y fait, impossible d'obtenir le fichier sur le serveur.

Avant tout, j'ajoute que l'upload manuel (en passant par la page web) fonctionne.

Voici mes différents scripts :

-HTML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<form method="post" enctype="multipart/form-data" action="upload.php">
 Enter file: <input type="file" name="sendfile" size="40">
 Enter file name: <input type="text" name="filename" size="40">
 <input type="submit" value="send" name="submit">
 </form>
-C++ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CURL *curl;
			CURLcode res;
 
			struct curl_httppost *formpost=NULL;
			struct curl_httppost *lastptr=NULL;
 
			curl_global_init(CURL_GLOBAL_ALL);
 
			curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "sendfile", CURLFORM_FILE, "mpdata", CURLFORM_END);
			curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "filename", CURLFORM_COPYCONTENTS, "mpdata", CURLFORM_END);
			curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "send", CURLFORM_END);
 
			curl = curl_easy_init();
			if(curl) 
			{
				curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/uploadtest.php");
				curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
				res = curl_easy_perform(curl);
 
				if(res != CURLE_OK)
					cout << "cURL Error";
 
				curl_formfree(formpost);
				curl_easy_cleanup(curl);
				curl_global_cleanup();
}
-PHP :
J'ai repris le code de ce tuto. (J'ai bien évidemment modifié les variables comme j'en avais besoin).

Ce qui semble bizarre, c'est que l'envoie se passe correctement mais impossible d'obtenir ce fichier.
J'ai dumpé le réseau pour voir ce qui se passe en réalité :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
POST /uploadtest.php HTTP/1.1..Host: 127.0.0.1..Accept: */*..Content-Length: 8913..Expect: 100-continue..Content-Type: multipart/form-data; boundary=----------------------------272c79f90e20....
 
HTTP/1.1 100 Continue....
 
------------------------------272c79f90e20..Content-Disposition: form-data; name="sendfile"; filename="mpdata"..Content-Type: application/octet-stream....
 
(Envoi du fichier, je ne post pas les 8476 octets)
 
..------------------------------272c79f90e20..Content-Disposition: form-data; name="filename"....mpdata_1e67a4fbfb8ec9daa9e81cd8f0fa525c..------------------------------272c79f90e20..Content-Disposition: form-data; name="submit"....send..------------------------------272c79f90e20--..
 
HTTP/1.1 200 OK..Date: Wed, 29 Aug 2012 16:51:12 GMT..Server: Apache/2.2.3 (CentOS)..X-Powered-By: PHP/5.3.15..Content-Length: 282..Connection: close..Content-Type: text/html; charset=UTF-8....<html><body><form method="post" enctype="multipart/form-data" action="upload.php">.. Enter file: <input type="file" name="sendfile" size="40">.. Enter file name: <input type="text" name="filename" size="40">.. <input type="submit" value="send" name="submit">.. </form></body></html>
J'espère que vous pourrez m'aider. Je vais essayer de spécifier le chemin complet du fichier à envoyer mais je ne suis pas sûr que ça vienne de là.

Merci d'avance