IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Sockets] Taille de la requête GET


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut [Sockets] Taille de la requête GET
    Bonjour,
    J'utilise la librairie C++ Sockets (http://www.alhem.net/Sockets/html/index.html).
    J'envoie des requêtes GET au serveur de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SocketHandler h;
    mHost = "adresse_ip";
    mPort = "port";
    request = "ma requete encodée en base 64";
    HttpGetSocket socket(h, mHost, mPort, request);
    Je récupère bien la requête côté serveur, mais au delà de 76 caractères dans ma chaîne request, la chaine est tronquée côté serveur. Je sais bien que les requêtes sont limitées en taille, mais 76 caractères, ca me parait très faible. Le double me conviendrait... Comment faire ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Par défaut
    Désolé peut pas aider (connais pas la lib), mais je peux te conseiller la libcurl :

    http://curl.haxx.se/

    elle est spécialisée dans tout ce qui touche aux urls

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Juste une petite question idiote, des fois que...

    A tout hasard, n'aurais tu pas un caractère nul ('\0') dans ta chaine, ce qui ferait que ce qui suit ne soit pas compté comme faisant partie de la dite chaine

    Loin de moi l'idée de sous entendre quoi que ce soit, mais, l'erreur étant humaine, c'est quand même la première question à se poser, non

    Pour info, il n'y a rien qui impose une taille minimale pour la requete, mais il est courant de parler de minimum 255 caractères possibles (bien que de nombreux serveurs admettent plus )

    Pour tout dire, la norme précise que le serveur doit supporter une URI pour chaque ressource qu'il fournit, et qu'il DEVRAIT supporter les URI illimitées s'il sert des formulaires susceptibles de généer de telles URI illimitées.

    Elle précise enfin que le serveur devrait renvoyer l'erreur 414 (URI too long) en cas de dépassement de taille pour l'URI :
    Citation Envoyé par section 3.2.1 general syntax
    The HTTP protocol does not place any a priori limit on the length of
    a URI. Servers MUST be able to handle the URI of any resource they
    serve, and SHOULD be able to handle URIs of unbounded length if they
    provide GET-based forms that could generate such URIs. A server
    SHOULD return 414 (Request-URI Too Long) status if a URI is longer
    than the server can handle (see section 10.4.15)
    Citation Envoyé par section 10.4.15 414 Request-URI Too Long

    The server is refusing to service the request because the Request-URI
    is longer than the server is willing to interpret. This rare
    condition is only likely to occur when a client has improperly
    converted a POST request to a GET request with long query
    information, when the client has descended into a URI "black hole" of
    redirection (e.g., a redirected URI prefix that points to a suffix of
    itself), or when the server is under attack by a client attempting to
    exploit security holes present in some servers using fixed-length
    buffers for reading or manipulating the Request-URI.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je dirais plutôt que le problème vient du fait que tu ne sais pas utiliser le protocole HTTP correctement.
    Je ne vois pas, par exemple, pourquoi tu devrais encoder quoi que ce soit en base64, surtout pour une requête GET.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Je dirais plutôt que le problème vient du fait que tu ne sais pas utiliser le protocole HTTP correctement.
    Je ne vois pas, par exemple, pourquoi tu devrais encoder quoi que ce soit en base64, surtout pour une requête GET.
    Car ma chaîne de caractères contient des espaces, et sans encodage, ma chaîne est coupée au premier espace rencontré.

    Je viens de résoudre le problème, qui venait d'ailleurs de la méthode d'encodage. J'utilisais celle de C++ Sockets, et apparemment elle est foireuse, elle me mettait un caractère de fin de ligne au beau milieu de ma chaîne. J'ai essayé avec une autre méthode d'encodage, et ca fonctionne.

    Merci à vous.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    Citation Envoyé par KrusK Voir le message
    Car ma chaîne de caractères contient des espaces, et sans encodage, ma chaîne est coupée au premier espace rencontré.

    Je viens de résoudre le problème, qui venait d'ailleurs de la méthode d'encodage. J'utilisais celle de C++ Sockets, et apparemment elle est foireuse, elle me mettait un caractère de fin de ligne au beau milieu de ma chaîne. J'ai essayé avec une autre méthode d'encodage, et ca fonctionne.

    Merci à vous.

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par KrusK Voir le message
    Car ma chaîne de caractères contient des espaces, et sans encodage, ma chaîne est coupée au premier espace rencontré.
    C'est normal d'envoyer des espaces....
    Une requete GET doitcontenir des espaces, et n'est jamais encodée....

    Après vérification auprès de l'URL que tu as filé, il semble que tu confondes "request" et "url"... Effectivement une URL ne peut pas contenir d'espace, mais ce n'est certainement pas encodé en base-64... L'URL encoding consiste à remplacer les caractères "spéciaux" (comme espace, etc...) par %XX (avec XX le code hexa-décimal du charactère).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question performance et "taille" d'une requête
    Par RR instinct dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/08/2007, 14h43
  2. [Prototype] Prototype Window gestion des requêtes GET et POST
    Par frankeedia@mac.com dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 20/06/2007, 17h32
  3. Réémission requête GET sur serveur Apache
    Par aquafiestas dans le forum Réseau
    Réponses: 18
    Dernier message: 04/10/2006, 14h28
  4. Requête GET ou POST sans formulaire.
    Par etiennegaloup dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/10/2005, 09h58
  5. [HTTP] Requête Get et récupération de la réponse
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 07/06/2005, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo