• STATISTIQUES
  • Il y a eu un total de 2 membres et 13229 visiteurs sur le site dans les dernières 24h pour un total de 13 231 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation
    [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [EN] SecurityFocus
    SecurityFocus a été conçu pour faciliter la discussion sur des sujets liés la sécu...
    Vulnérabilités
    [FR] NewbieContest
    Nous vous proposons une série de challenges regroupant plusieurs domaines allant de l'exploitation de fail...
    Hacking
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C++] Requéte http
02-11-2012, 09h56 (Modification du message : 19-11-2012, 19h24 par InstinctHack.)
Message : #1
oxame Hors ligne
Newbie
*



Messages : 17
Sujets : 3
Points: 0
Inscription : Jun 2012
[C++] Requéte http
Bonjour,

J'ai un petit souci et j'aurais besoin d'un regard extérieur pour trouvez mon erreur,
Je me suis lancé dans la programmation (c++) réseaux

J'ai commencé par codé une classe gèrent les Sockets, puis j'ai crée une classe gèrent le protocole IRC et la je me lance dans une classe gèrent le protocole HTTP aparament le serveur reconnais correctement la requête mais je n'arrive a récupéré la page a proprement parlé j’obtiens :

HTTP/1.1 200 OK
Date: Fri, 02 Nov 2012 07:38:38 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: NID=65=Sv1539rRDdfH-y4HOeOyd8l7oLZMJvt_2lm1aM6nAEN1Pm1PzHW-dICfdvBsW
QyE07b-J-dNw9uggh2pGUxkNfUrvGO2VPBCwNHW-MwGoclECJ3w7drY3ApMznNZMDLG; expires=Sat
, 04-May-2013 07:38:38 GMT; path=/; domain=.; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bi
n/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked


voila le code :

classe socket

mysock.h

Code :
#ifndef DEF_MYSOCK
#define DEF_MYSOCK

#include <iostream>
#include <String>
typedef int socklen_t;
#include <winsock2.h>

//#pragma comment(lib,"Ws2_32.lib")


class mysock {

    public:
        mysock(const char* dest, int port);
        virtual ~mysock();
        std::string communication(std::string donne);
        void senddonne(std::string donne);
        std::string ecoute();

    protected:
        int initialisation();
        int opensock();
        int etablisement();
        int closesession();
        int liberationsock();
        int liberationwinsowk();
        int recevoirdonne();
        int envoiedonne(std::string donne);


    private:

        int m_port;
        const char* m_dest;
        char buffer[65535];
        std::string* retdonne;
        WSADATA WSAData;
        SOCKET sock;
        SOCKADDR_IN sin;
};

#endif

mysock.cpp

Code :
#include "mysock.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

mysock::mysock(const char* dest, int port)
{
    m_dest = dest;
    m_port = port;

    try
    {
        if(initialisation() != 0)
        {
            throw std::string("Erreur Initialisation !\n");
        }

        sock = opensock();
        if(sock == INVALID_SOCKET)
        {
            throw std::string("Socket invalid");
        }

        if(etablisement() == SOCKET_ERROR)
        {
            throw std::string("Impossible de se connecté");
        }
    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }

}

mysock::~mysock()
{
    try
    {
        if(closesession() != 0)
        {
            throw std::string("Impossible de fermer la socket");
        }

        if(liberationsock() != 0)
        {
            throw std::string("Impossible de liberer la socket !\n");
        }

        if(liberationwinsowk() != 0)
        {
            throw std::string("Impossible de liberer winsock !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
}

std::string mysock::communication(std::string  donne)
{
    try
    {
        if(envoiedonne(donne) == SOCKET_ERROR)
        {
            throw std::string("Erreur envoye donne !\n");
        }
        strcpy(buffer, "" );
        if(recevoirdonne() == SOCKET_ERROR)
        {
            throw std::string("Erreur reception donne !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
    return buffer;
}

std::string mysock::ecoute()
{
    try
    {
        strcpy(buffer, "" );
        if(mysock::recevoirdonne() == SOCKET_ERROR)
        {
            throw std::string("Erreur reception donne !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
    return buffer;
}

void mysock::senddonne(std::string donne)
{

    try
    {
        if(mysock::envoiedonne(donne) == SOCKET_ERROR)
        {
            throw std::string("Erreur reception donne !\n");
        }

    }
    catch(std::string const& chaine)
    {
        std::cout << chaine << std::endl;
    }
    donne.clear();
}

int mysock::initialisation()
{
    return WSAStartup(MAKEWORD(2,2), &WSAData);
}

int mysock::opensock()
{
    return socket(AF_INET, SOCK_STREAM, 0);
}

int mysock::etablisement()
{
    sin.sin_addr.s_addr = inet_addr(m_dest);
    sin.sin_family = AF_INET;
    sin.sin_port = htons(m_port);
    return connect(sock, (SOCKADDR*)&sin, sizeof(sin));
}

int mysock::closesession()
{
    return shutdown(sock,2);
}

int mysock::liberationsock()
{
    return closesocket(sock);
}

int mysock::liberationwinsowk()
{
    return WSACleanup();
}

int mysock::recevoirdonne()
{
    memset(buffer,0,sizeof(buffer));
    return recv(sock, buffer, sizeof(buffer), 0);
}

int mysock::envoiedonne(std::string donne)
{
    return send(sock,donne.c_str(), donne.size(),0);
}

classe http

http.h

Code :
#ifndef DEF_HTTP
#define DEF_HTTP

#include "mysock.h"

class http {

    public:
        http(const char* url);
        virtual ~http();
        std::string get(const char* page);

    protected:
        std::string header(const char* head_page, int en_tete);
        std::string host();
        std::string user_agent();
        std::string Accept();
        std::string Accept_language();
        std::string Accept_encoding();

    private:
        int http_port;
        std::string _url;
        std::string _host;
        std::string cr;
        std::string lf;
        mysock::mysock *chausette;
};

#endif

http.cpp

Code :
#include "http.h"


http::http(const char* url) : http_port(80), _url(url)
{
    cr = 0x0d;
    lf = 0x0a;
    chausette = new mysock(url, http_port);
}

http::~http()
{
    delete chausette;
}

std::string http::get(const char* page)
{
  /*  chausette->senddonne(http::header(page,0));
    std::string buf, rep;

    do
    {
        buf.clear();
        buf = chausette->ecoute();
        rep += buf;
    }while(buf != "");

    return rep;
    */
    return chausette->communication(http::header(page,0));
}

std::string http::header(const char* head_page, int en_tete)
{
    std::string requete;


    if(en_tete == 0)
    {
        requete += "GET ";
        requete += head_page;
        requete += " HTTP/1.1";
        requete += cr + lf;
    }


    requete += host();
    requete += user_agent();
    requete += Accept();
    requete += Accept_language();
    requete += Accept_encoding();

    return requete + cr + lf;
}

std::string http::host()
{
    return "Host: " + _url + cr + lf;
}

std::string http::user_agent()
{
    return "User-Agent: Ox Agent" + cr + lf;
}

std::string http::Accept()
{
    return "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" +  cr + lf;
}

std::string http::Accept_language()
{
    return "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" +  cr + lf;
}

std::string http::Accept_encoding()
{
    return "Accept-Encoding: gzip, deflate" +  cr + lf;
}

le main

Code :
#include <iostream>
#include "http.h"

using namespace std;

int main()
{
    http tar("173.194.35.183");
    std::string tmp = tar.get("/index.html");
    cout << tmp;

    return 0;
}

Peux être que quelqu'un vas voir l’erreur énorme qui se cache soit dans le code ou dans l'interprétation du protocol.

Merci d'avance.

Oxame
+1 (0) -1 (0) Répondre
02-11-2012, 12h10
Message : #2
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: requéte http
Regarde : http://support.google.com/accounts/bin/a...wer=151657
Je pense que tu fais un truc qui va pas avec P3P ou ton cookie mais je ne saurai te dire quoi ^^'
+1 (0) -1 (0) Répondre
02-11-2012, 18h52
Message : #3
Dobry Hors ligne
Tueur de lamouz
*



Messages : 206
Sujets : 25
Points: 73
Inscription : Aug 2011
RE: requéte http
Je n'ai pas eu le temps de regarder ton code (et je n'ai jamais utilisé les sockets sur windows), mais si tu veux, j'ai fait une classe similaire que tu peux retrouver https://github.com/necromoine/libSimpleW...socket-src (c'est loin d'être parfait mais c'est fonctionnel).
Je regarderai ton problème plus précisement en début de semaine prochaine si tu n'as pas trouvé de solutions entre temps !
Aestuārium Erudītiōnis

There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
+1 (0) -1 (0) Répondre
02-11-2012, 20h28
Message : #4
oxame Hors ligne
Newbie
*



Messages : 17
Sujets : 3
Points: 0
Inscription : Jun 2012
RE: requéte http
@swissky : oui c'est parc-que je n'est pas encore implémenté la gestion des cookie;

@exOns : merci du partage,

bon j'ai trouvez je ne laissai pas m'a socket en écoute assez longtemps, comme quoi un bonne journée de boulot sa vous éclairci les idée.
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] Un mini-serveur HTTP -Moloch- 11 3,323 19-04-2013, 14h22
Dernier message: notfound
  [C++] LibSimpleWeb, des requetes HTTP simples Dobry 0 858 29-03-2012, 14h56
Dernier message: Dobry

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut