OVH Community, votre nouvel espace communautaire.

[C] Envoie d'une requête GET d'un programme externe Bad request


pilout01
10/05/2016, 20h33
Bonjour, étant étudiant je dois envoyer une requête GET sur une page web.

J'ai donc créer une methode codé en c que voici :

Code:
char* sendDatas(char* datas)
{
 
    /* first what are we going to send and where are we going to send it? */
    int portno =        80;
    char *host =        "213.186.33.40";
    char *message_fmt = "GET /~netfunettn/maj/index.php?datas=%s HTTP/1.1\r\n\r\n";
 
    struct hostent *server;
    struct sockaddr_in serv_addr;
    int sockfd, bytes, sent, received, total;
    char message[1024],response[4096];
 
 
   
    sprintf(message,message_fmt,datas);
    printf("Request:\n%s\n",message);
 
   
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) error("Erreur lors de l'ouverture de la socket");
 
   
    server = gethostbyname(host);
    if (server == NULL) error("Erreur host injoiniable");
 
   
    memset(&serv_addr,0,sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(portno);
    memcpy(&serv_addr.sin_addr.s_addr,server->h_addr_list[0],server->h_length);
 
   
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
        error("Erreur a la connexion");
 
   
    total = strlen(message);
    sent = 0;
    do {
        bytes = write(sockfd,message+sent,total-sent);
        if (bytes < 0)
            error("Erreur durant l'envoi du message");
        if (bytes == 0)
            break;
        sent+=bytes;
    } while (sent < total);
 
   
    memset(response,0,sizeof(response));
    total = sizeof(response)-1;
    received = 0;
    do {
        bytes = read(sockfd,response+received,total-received);
        if (bytes < 0)
            error("Erreur durant la lecture de la reponse");
        if (bytes == 0)
            break;
        received+=bytes;
    } while (received < total);
 
    if (received == total)
        error("ERREUR reponse incomplete du serveur");
 
   
    close(sockfd);
 
    printf("%s",response);
 
    return response;
}
Cette fonction marche bien local , seulement avec OVH j'obtiens une erreur de retour 400 indiquant une erreur de syntaxe dans la requête que j'envoie.

Quelqu'un aurais t'il une idée du problème , c'est a rendre pour demain je serai très reconnaissant de la personne qui m'aidera .

Merci d'avance