Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : le http post OK. Mais pour un UPLOAD de fichier ? [ Archives / Réseau / Internet ] (pdessoulles)

lundi 22 septembre 2003 à 03:10:38 | le http post OK. Mais pour un UPLOAD de fichier ?

pdessoulles

Salut à tous,

Le problème suivant me pourrit la vie depuis quelques jours :

J'arrive bien à envoyer des données sur une socket ouverte sur un serveur http avec les méthodes post ou get, mais pour la "post", je sèche sur l'upload de fichier.

Un formulaire html en "post" simple est :

<form action="toto.php" method="post" name="form1" onSubmit="return true;">
<input name="titi">
<input type="submit" value="SUBMIT">
</form>

ce qui donne, lorsqu'on a saisi "canari", pour la chaîne de caractère à envoyer sur la socket:

"POST toto.php HTTP/1.1\r\n"
"Host: www.site_web.com\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 11\r\n" // taille des données qui suivent
"\r\n"
"titi=canari\r\n"
"\r\n"

Et dans le script php qui récupère les données, "toto.php", on a bien :
$_POST['titi'] qui renvoie la valeur "canari"

Tout ça, c'est très bien et ça marche, mais ce que j'aimerais, c'est savoir quoi envoyer à la socket avec le formulaire d'upload de fichier :

<form enctype="multipart/form-data" action="send.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Send this file:
<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

qui a pour conséquence, dans le script php "send.php" de remplir le tableau superglobal $_FILES[] et non pas $_POST[] (tout en uploadant, bien entendu, le fichier en question dans le répertoire temporaire du site web)

A celui ou ceux qui pourront m'aider.. et me rendre le sommeil, un grand merci.

Philippe

samedi 29 novembre 2003 à 01:15:15 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

amodels

Bonjour.
Comme vous avez noté pouvoir lancer un fichier PHP distant, je me demandais si vous pourriez m'envoyer le source C de cet exploit ;) En effet, je suis dessus depuis plusieurs mois ;(
Je bloque sur les fonctions du C 'recv()' et 'sendto()'.
J'espère pouvoir ensuite vous aider ...
Merci d'avance
Zian (dune2@free.fr)

samedi 29 novembre 2003 à 13:25:18 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

amodels

Rebonjour, voici le code que j'expérimente :

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sock = socket(AF_INET,SOCK_STREAM,0);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("\n\n -> CONNEXION OK");

send(sock,"POST toto.php HTTP/1.1\r\n",24,0);
send(sock,"Host: 127.0.0.1\r\n",23,0);
send(sock,"Content-Type: application/x-www-form-urlencoded\r\n",49,0);
send(sock,"Content-Length: 11\r\n",20,0); // le 11 est la taille de 'titi=canari'
send(sock,"\r\n",2,0);
send(sock,"titi=canari\r\n",13,0);
send(sock,"\r\n",2,0);


printf("\n\n -> TRANSFERT OK");
closesocket(sock);
WSACleanup();
}



Ca ne fonctionne malheureusement pas.
Please help :)

lundi 1 mars 2004 à 15:39:38 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

nomodie


bon, pour mon premier post, j'espere ne pas ecrire trop de conneries......
J'ai testé ton prog, amodels, pour acceder a un serveur apache en local(EasyPHP), effectivement, il me ressort une erreur 10048, socket deja utilisée. En matant l'aide en ligne, ils indiquent qu'un client (ce qui a l'ai d'etre le cas ici) n'a pas forcement besoin d'appeleer la fonction bind() (ma theorie perso: bind doit rendre l'usage d'une socket exclusive, et vu qu'apache doit en creer une pour ecouter sur le port 80,ca bug....).
Une fois fait, je me connecte bien (preuve en est le fichier 'Acces Apache', mais j'ai une erreur style 'Request failed: error reading the headers', fichier 'Fichier log->erreur Apache'. Pour tenter le coup, je met tout le texte a envoyer dans une seule chaine, et je ne fais qu'un seul send(). Et ca a marché...Le script php recupere bien les données, et s'execute parfaitement.....
Pour l'envois de fichiers, apres avoir passer du temps a mater les aides et rfc sur les requetes http, on voit qu'une telle requette se decoupe ainsi:
POST LA OU JE VEUX.php HTTP/1.1\r\n
Host: 127.0.0.1\r\n
Content-Type: multipart/form-data; boundary=---6G+f\r\n
Content-length:218\r\n\r\n-----6G+f\r\n
Content-Disposition: form-data; name='fichier'; filename='C:\\test.txt'\r\n
Content-type:text/plain\r\n
\r\nCeci est un test!!!\r\n
-----6G+f--\r\n
(j'ai mis le \r\n passsssque Apache, il est assez pointilleux avec ces trucs....).
le boundary, c'est un separateur que tu defini toi meme, mais faut penser a rajoutter '--' devant, pour indiquer le debut d'un block , et '--' au dernier que tu utilises (fin du message)
Et pareil, un seul send().
Voila, ca marche chez moi, j'espere que ca te mettrra au moins sur la voie....


jeudi 25 mars 2004 à 21:02:31 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

seed

j'ai un petit problème chez moi je n'arrive pas à envoyer une requete POST.
J'ai enlevé le bind et j'ai créer un page test.php qui dès qu'elle est lancé crée un fichier texte contenant la variable $_POST['var'].
je lance le programme mais rien ne se passe même dans les logs Acces de Apache (easyphp) rien du tout.

voici le code :
//-----------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sock = socket(AF_INET,SOCK_STREAM,0);
printf("\n\n -> CONNEXION OK");

send(sock,"POST test.php HTTP/1.1\r\n",23,0);
send(sock,"Host: 127.0.0.1\r\n",23,0);
send(sock,"Content-Type: application/x-www-form-urlencoded\r\n",48,0);
send(sock,"Content-Length: 11\r\n",20,0);
send(sock,"\r\n",2,0);
send(sock,"var=canaris\r\n",13,0);
send(sock,"\r\n",2,0);


printf("\n\n -> TRANSFERT OK");
getch();
closesocket(sock);
WSACleanup();
}
//-----------------------------------------------------------

jeudi 25 mars 2004 à 22:17:21 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

nomodie


dis moi, t'aurais pas oublié:
if(connect(sock,(SOCKADDR*)&sin,sizeof(sin))==0)//connection a un serveur
juste avant de faire tes send par hasard?

samedi 27 mars 2004 à 10:27:37 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

seed

OUps en effet j'avais recopier le code sans trop y faire attention par contre chez moi php ne recoit aucune variables POST si j'envoie la requete avec plusieurs sends comme dans le script de amodels

mais sinons si je mets tous dans une chaine de caracteres ca marche nikel.

MERCi

samedi 27 mars 2004 à 11:26:45 | Re : le http post OK. Mais pour un UPLOAD de fichier ?

nomodie


Ouaip, Apache semble pointilleux sur les requetes envoyées, mais il est possible qd meme de decouper une requete (notament qd on envoie des fichiers), il faut juste tester les 'decoupes' pour trouver ce qu'il accepte.
Au fait, tant que j'y pense, si vous voulez envoyer des fichiers avec vos requetes du type image par exemple, penser a ouvrir les fichiers en mode binaire et a utiliser des pointeurs 'void' pour recuperer les infos du fichiers et les balancer, sinon, vous vous retrouverez comme moi a avoir des fichiers gif imcomplet (passssque char interprete certain caracteres, comme le caractere null, et il peut tres bien (toujours?) y avoir de tels caracteres dans un fichier image.
Par exemple:
void content=malloc(taillefichier));
memset(content,0x00,taille);
//lecture du fichier
fread(content, 1, taille, fp );
//envois le fichier
send(sock,(char*)content,taille,0);
et la, ca me regle le probleme.



Cette discussion est classé dans : fichier, php, upload, http, post


Répondre à ce message

Sujets en rapport avec ce message

Upload fichier par HTTP avec c++ builder [ par sidhannowe ] Salut, J'aurais voulu savoir comment procéder pour envoyer un fichier image par le HTTP (donc équivalent à un formulaire web en post et champ file) a Requête POST http [ par tetedemul ] Bonjour, je voudrais faire une requete post avec un socket. Mon code fonctionne, dans le log d'apache j'ai bien "POST test.php...".Mais comment récupé Upload fichier via HTTP [ par Taron31 ] Bonjour, je souhaiterais connaitre un moyen simple et efficace (si possible) d'uploader un fichier via HTTP, sur des sites du genre upoad.free.fr ou a Langage C/serveur/PHP [ par fabulofr ] Bonjour ou plutot bonsoir à tous.Je viens vous embeter avec un petit probleme.Je possède un serveur dédié contenant un jeu en ligne.Ce jeu fonctionne Upload un fichier .TXT [ par MorbhAck ] Bonsoir a tous !J'aimerai savoir comment on Uploader un fichier .txt sur un serveur FTP ??J'ai vu plusieur source sur Cppfrance mais elle sont trop co Problème lors de la récéption de données en HTTP [ par Fran6web ] Bonjour,Je suis en train de me faire un programme en C qui me récupère le contenu d'un page envoyé par protocole HTTP.J'ai cependant un p'tit problème Winsock et les accents... [ par fredsor ] Salut a tous, Voila j'ai realisé un projet, celui-ci consiste à récupérer une chaine de caracteres provenant d'une servlet distante.Bon jusque là rien POST HTTP [ par draluorg ] Salut a tous,eh c'est pas vraiment une question sur le C mais je sais pas trop ou poster ca...En fait j'ai une appli qui doit poster un message dans u [dev-cpp] probleme de compilation d'un fichier de classes [ par gergalp ] Voilà, alors, j'ai un fichier de classes qui est inclus dans le fichier principal ou j'ai ma fonction main(). Quand je veux compiler, j'ai l'erreur : application d'upload de fichier via internet [ par symbiote80 ] Bonjour,J'aimerai développer une application de transfert de fichiers d'un poste local vers un serveur distantIl faudrait aussi que l'application s'in


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.