Requete HTTP POST MIME - Upload de fichier

Signaler
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010
-
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010
-
Bonjour, je suis débutant et j'ai créer une fonction pour uploader un fichier sur un serveur php apache via le protocole http et le standard mime.

Le problème est pour uploader une image jpg, j'avais penser l'encoder en base_64 et rajouter Content-Transfer-Encoding:base64 dans le header de la requête, mais apparemment ça ne semble pas possible avec le protocole http (<lien url="http://www.faqs.org/rfcs/rfc2616.html">voir rfc2616</lien> - 19.4.5) si je l'encode en base 64 le fichier recut sur le serveur php reste en base 64 et n'est pas décodé ... et si je ne converti pas le fichier et l'envoi tel qu'elle(comme dans le code ci-dessous) cela ne marche pas non plus ... comment puis-je faire ?


Merci d'avance pour vos réponse ..

désolé si je n'ai pas été assez clair, mais n'hésitez pas à poser des questions ..

Chouquette .

Mon Code :

void UPLOAD()
{

  WSADATA WSAData;
   int erreur = WSAStartup(MAKEWORD(2,0), &WSAData);
   SOCKET sock;
   SOCKADDR_IN sin;
   char buffer[1024] = "";
 
    /* Si les sockets Windows fonctionnent */
    if(!erreur)
    {
        /* Création de la socket */
        sock = socket(AF_INET, SOCK_STREAM, 0);
 
        /* Configuration de la connexion */
                struct hostent *ipserver;
                ipserver = gethostbyname(url_server);
                memcpy(&sin.sin_addr,ipserver->h_addr,ipserver->h_length);
        sin.sin_family = AF_INET;
        sin.sin_port = htons(80);
 
        /* Si l'on a réussi à se connecter */
        if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) != SOCKET_ERROR)
        {

                        FILE* fichier = NULL;
                        char chaine[45000];
            char commande[50000];
                        char variables[60000];
                        fichier = fopen("test.jpg", "r");

                        sprintf(variables,"--frontier\r\nContent-Disposition: form-data; name="envoyer"\r\n\r\noui\r\n--frontier\r\nContent-Disposition: form-data; name="fichier"; filename="test.jpg"\r\nContent-Type: image/jpeg\r\n\r\n");
                
                        if (fichier != NULL)
                        {
                                while (fgets(chaine, 45000, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
                                {
                                 strcat(variables,chaine);
                                }
                        }        

                        strcat(variables,"\r\n--frontier--\r\n");
                        sprintf(commande,"POST %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nContent-Type: multipart/form-data; boundary="frontier"\r\nMIME-version: 1.0\r\nContent-Length:%d\r\n\r\n%s",http_req_path,url_server,strlen(variables),variables);
                        send(sock,commande,strlen(commande)+1,0);

                        char response [1024] ="";
                        while (recv(sock,buffer, 1024, 0) > 0)
            {
                strcat(response, buffer);
            }
                        char *resultatfinal = strstr(response, "\r\n\r\n")+4;
                        printf("%s", resultatfinal);

        }
        /* sinon, on affiche "Impossible de se connecter" */
        else
        {
            printf("Impossible de se connecter\n");
        }
 
        /* On ferme la socket */
        closesocket(sock);
 
        WSACleanup();
        }

}

2 réponses

Messages postés
57
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
7 octobre 2009

Si tu as trouvé une solution je suis preneur. j'ai le même problème que toi.
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

Non désolé je n'ai toujours pas trouvé, si toi aussi tu trouve préviens moi ^^
En attendant pour mes tests j'utilise la librairie Chilkat HTTP mais elle est payante et je n'ai qu'une version d'essais de 30 jours