Forum Programmation.c Requete post

Posté par  .
Étiquettes : aucune
0
13
août
2007
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
{
$erreur = 'Just txt file!';
}

if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
if(move_uploaded_file($_FILES['file']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload OK!';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Upload FAILED!';
}
}
else
{
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)
{
struct hostent *he;
struct sockaddr_in their_addr;

if ((he=gethostbyname(ip)) == NULL) {
herror("gethostbyname");
exit(1);
}

printf("[+] Connect to %s port %d\n",ip,PORT);

if ((fd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
perror("[+] Socket");
exit(1);
}

their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);

if (connect(fd, (struct sockaddr *)&their_addr,sizeof their_addr) == -1) {
perror("[+] Connect");
exit(1);
}else{printf("[+] Connected!\n\n");}

return(fd);
}

int requete(int fd)
{
char *buffer = "POST /~y0ug/up.php HTTP/1.1\r\n"\
"Content-Type: multipart/form-data; boundary=---------------------------7d72ee34401f2\r\n"\
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\r\n"\
"Host: 192.168.1.1\r\n"\
"Connection: Keep-Alive\r\n"\
"Cache-Control: no-cache\r\n"\
"\r\n"\
"-----------------------------7d72ee34401f2\r\n"\
"Content-Disposition: form-data; name='file'; filename='try.txt'\r\n"\
"Content-Type: text/plain\r\n"\
"\r\n"\
"fichier que je veux"\
"\r\n-----------------------------7d72ee34401f2\r\n"\
"Content-Disposition: form-data; name='envoyer'\r\n"\
"\r\n"\
"send"\
"\r\n-----------------------------7d72ee34401f2--\r\n";


printf("Send POST requete:\n%s\n",buffer);
if(write(fd,buffer,strlen(buffer))==-1)
perror("[+] Write ");
exit(1);
}else{printf("[+] Requete send!\n");}
return 1;
}

int receive(int fd)
{
char *buffer[32];
recv(fd,buffer,31,0);
printf("Receive:\n%s\n",buffer);
}

int main (int argc, char **argv)
{
printf("[+] PORT: %d\n",PORT);
printf("[+] IP: %s\n\n",IP);

int fd = connected(fd,IP);
requete(fd);
receive(fd);
close(fd);
}

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.