Requete HTTP POST MIME - Upload de fichier

cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010 - 20 janv. 2009 à 19:21
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010 - 3 mars 2009 à 19:37
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

zibo3 Messages postés 57 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 7 octobre 2009
17 févr. 2009 à 13:07
Si tu as trouvé une solution je suis preneur. j'ai le même problème que toi.
0
cs_SuperChouquette Messages postés 37 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 18 mai 2010
3 mars 2009 à 19:37
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
0