URL: https://linuxfr.org/forums/programmation-c--2/posts/requete-post Title: Requete post Authors: y0ug Date: 2007年08月13日T18:18:15+02:00 Tags: Score: 0 Voilà je voudrais uploadé un fichier texte sur un server web. Pour celà j'ai mis un script php sur le server le script marche si je passe par un formulaire. Mais si j'envoie la requette POST de client.c bin la le server ne répond pas alors que sur la une commande GET / je pe lire la réponse. Je pense donc que ma requette et mauvaise. Et aussi j'aimerais savoir se que ces que boundary. Merci Voici les 2 sources. <?php //up.php $dossier = ''; $fichier = basename($_FILES['file']['name']); $taille = filesize($_FILES['file']['tmp_name']); $extensions = array('.txt'); $extension = strrchr($_FILES['file']['name'], '.'); if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau { £spaces£ £/spaces£$erreur = 'Just txt file!'; } if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload { £spaces£ £/spaces£if(move_uploaded_file($_FILES['file']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... £spaces£ £/spaces£{ £spaces£ £/spaces£echo 'Upload OK!'; £spaces£ £/spaces£} £spaces£ £/spaces£else //Sinon (la fonction renvoie FALSE). £spaces£ £/spaces£{ £spaces£ £/spaces£echo 'Upload FAILED!'; £spaces£ £/spaces£} } else { £spaces£ £/spaces£echo $erreur; } ?> //client.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #define PORT 80 #define IP "192.168.1.1" int connected(int fd,char *ip) { £spaces£ £/spaces£struct hostent *he; £spaces£ £/spaces£struct sockaddr_in their_addr; £spaces£ £/spaces£if ((he=gethostbyname(ip)) == NULL) { £spaces£ £/spaces£herror("gethostbyname"); £spaces£ £/spaces£exit(1); £spaces£ £/spaces£} £spaces£ £/spaces£ £spaces£ £/spaces£printf("[+] Connect to %s port %d\n",ip,PORT); £spaces£ £/spaces£ £spaces£ £/spaces£if ((fd = socket(PF_INET, SOCK_STREAM, 0)) == -1) { £spaces£ £/spaces£perror("[+] Socket"); £spaces£ £/spaces£exit(1); £spaces£ £/spaces£} £spaces£ £/spaces£their_addr.sin_family = AF_INET; £spaces£ £/spaces£their_addr.sin_port = htons(PORT); £spaces£ £/spaces£their_addr.sin_addr = *((struct in_addr *)he->h_addr); £spaces£ £/spaces£memset(their_addr.sin_zero, '0円', sizeof their_addr.sin_zero); £spaces£ £/spaces£if (connect(fd, (struct sockaddr *)&their_addr,sizeof their_addr) == -1) { £spaces£ £/spaces£perror("[+] Connect"); £spaces£ £/spaces£exit(1); £spaces£ £/spaces£}else{printf("[+] Connected!\n\n");} £spaces£ £/spaces£ £spaces£ £/spaces£return(fd); } int requete(int fd) { £spaces£ £/spaces£char *buffer = "POST /~y0ug/up.php HTTP/1.1\r\n"\ £spaces£ £/spaces£"Content-Type: multipart/form-data; boundary=---------------------------7d72ee34401f2\r\n"\ £spaces£ £/spaces£"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\r\n"\ £spaces£ £/spaces£"Host: 192.168.1.1\r\n"\ £spaces£ £/spaces£"Connection: Keep-Alive\r\n"\ £spaces£ £/spaces£"Cache-Control: no-cache\r\n"\ £spaces£ £/spaces£"\r\n"\ £spaces£ £/spaces£"-----------------------------7d72ee34401f2\r\n"\ £spaces£ £/spaces£"Content-Disposition: form-data; name='file'; filename='try.txt'\r\n"\ £spaces£ £/spaces£"Content-Type: text/plain\r\n"\ £spaces£ £/spaces£"\r\n"\ £spaces£ £/spaces£"fichier que je veux"\ £spaces£ £/spaces£"\r\n-----------------------------7d72ee34401f2\r\n"\ £spaces£ £/spaces£"Content-Disposition: form-data; name='envoyer'\r\n"\ £spaces£ £/spaces£"\r\n"\ £spaces£ £/spaces£"send"\ £spaces£ £/spaces£"\r\n-----------------------------7d72ee34401f2--\r\n"; £spaces£ £/spaces£printf("Send POST requete:\n%s\n",buffer); £spaces£ £/spaces£if(write(fd,buffer,strlen(buffer))==-1) £spaces£ £/spaces£perror("[+] Write "); £spaces£ £/spaces£exit(1); £spaces£ £/spaces£}else{printf("[+] Requete send!\n");} £spaces£ £/spaces£return 1; } int receive(int fd) { £spaces£ £/spaces£char *buffer[32]; £spaces£ £/spaces£recv(fd,buffer,31,0); £spaces£ £/spaces£printf("Receive:\n%s\n",buffer); } int main (int argc, char **argv) { £spaces£ £/spaces£printf("[+] PORT: %d\n",PORT); £spaces£ £/spaces£printf("[+] IP: %s\n\n",IP); £spaces£ £/spaces£ £spaces£ £/spaces£int fd = connected(fd,IP); £spaces£ £/spaces£requete(fd); £spaces£ £/spaces£receive(fd); £spaces£ £/spaces£close(fd); }

AltStyle によって変換されたページ (->オリジナル) /