Strona 2 z 3 PierwszyPierwszy 123 OstatniOstatni
Pokaż wyniki 11 do 20 z 23

Temat: get HTTP w c++

  1. #11
    Avatar Michal_sh
    Michal_sh jest offline (s)aint
    Zarejestrowany
    Apr 2007
    Postów
    689

    Domyślnie

    Paladyn ThX za kod ale zapomniałem dodać że piszę to pod win ... (nie lubię ale cóż .... )

    Dobra kod c++ odnalazłem w necie Posłuży mi jako przykład heh Thx wszystkim za odpowiedzi pewnie jeszcze będę miał parę problemów podczas pisania tego programu
    Ostatnio edytowane przez Michal_sh : 12-03-2009 - 20:04

  2. #12
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie example's code

    hi
    masz example kod jak wysylac metody get i post do serwera oraz odbior danych

    Kod:
    #include <stdio.h>
    #include <winsock2.h>
    
    #define PORT 80
    
    //
    
    unsigned int send_data( SOCKET sock, char* data ) {
        // wysylanie do serwera danych
        int ret;
        ret = send( sock, data, strlen( data ), 0 );
        if( ret == SOCKET_ERROR ) return 0;
        //
    } 
    
    
    void recv_data( SOCKET sock, char* data ) {
        // odbior danych z serwera
        int ret;
        
        while( ret = recv( sock, data, sizeof( data ), 0 ) != 0 ) {
            puts( data );
        }
        //
    }
    
    
    unsigned int socket_set( void ) {
        // tworzenie i ustawianie gniazda
        // zrobimy takze handshake z serwerem
        
        // glowne dane potrzebne do polaczenia z serwerem
        char address[512] = ""; // tutaj wpisz adres serwera z ktorym chcesz nawiazac polaczenie 
    
        struct sockaddr_in http;
        http.sin_addr.s_addr = inet_addr( "217.149.249.51" );
        http.sin_port = htons( PORT );
        http.sin_family = AF_INET;
        
        WSADATA w_data;
        WSAStartup( MAKEWORD( 2,0 ), &w_data );
        
        SOCKET sock;
        sock = socket( AF_INET, SOCK_STREAM, 0 );
        if( sock == INVALID_SOCKET ) return 's';
        
        int ret;
        ret = connect( sock, ( struct sockaddr* )&http, sizeof( struct sockaddr_in ) );
        if( ret == SOCKET_ERROR ) return 'c';
        
        char packet[1024] = 
        "GET /yourdata.html\r\n"
        "Host: your hostname\r\n";
        
        char r_data[5000];
        
        ret = send_data( sock, packet );
        if( ret == -1 ) return 'd';
        
        recv_data( sock, r_data );
       //
    }
    gcc compile status: done

  3. #13
    Avatar Michal_sh
    Michal_sh jest offline (s)aint
    Zarejestrowany
    Apr 2007
    Postów
    689

    Domyślnie

    Kurde męczę się aktualnie ze stringiem. Wygląda to mniej więcej tak:

    http://pl.tinypic.com/view.php?pic=xb9rwp&s=6

    Próbuje wyciąć tylko tekst który jest po <! i przed !> czyli wychodzi na to że to wyraz hey. Próbowałem str.find("<!") potem str.substr() i niz z tego nie wychodziło. Nie wiem o co chodzi już 3 h męcze się z tym fragmentem ja pierdziele przecież to powinno wyjść... Ma ktoś jakieś pomysły ?

    No chyba ze ma ktoś server który zwróci mi tylko zawartość txt bez zbednych nagłówków Preferował bym takie rozwiązanie.

    /// OK poradziłem sobie , troche to trwało ale serv zwracał za dużo danych
    Ostatnio edytowane przez Michal_sh : 12-05-2009 - 21:11

  4. #14
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie

    znajdz sobie wiekszy fragment tekstu ktory chcesz wyciac uzywajac funkcji stringu find ktora wyszukuje dany fragment i zwraca jego pozycje, wyszukaj ten fragment tak jak sie rozpoczyna a pozniej jego koniec i to co jest w srodku wytnij funkcja substr() uzywajac zwroconych pozycji. that's easy

  5. #15
    Zarejestrowany
    Mar 2008
    Postów
    7

    Domyślnie

    Ja zrobilem cos takiego:

    Kod:
    #include <winsock2.h>
    #define PORT 80
    
    std::string download( char address[512], char packet[1024] ) {
     
        
        struct sockaddr_in http;
        http.sin_addr.s_addr = inet_addr(address);
        http.sin_port = htons( PORT );
        http.sin_family = AF_INET;
        
        WSADATA w_data;
        WSAStartup( MAKEWORD( 2,0 ), &w_data );
        
        SOCKET sock;
        sock = socket( AF_INET, SOCK_STREAM, 0 );
        connect( sock, ( struct sockaddr* )&http, sizeof( struct sockaddr_in ) );
        char r_data[1024];
        send( sock, packet, strlen( packet ), 0 );
     
        int ret;
        std::string odczyt;
        while( ret = recv( sock, r_data, sizeof( r_data ), 0 ) != 0 ) {
        odczyt=odczyt + r_data;      
        }
        WSACleanup();
        return odczyt;
    
    }
    WSACleanup(); <- z tym miałem niezły ubaw, zużycie pamięci co połączenie wzrastało o 4k chyba po godzinie skapłem się że to właśnie przez brak tej linijki.

    do tego jeszcze taki kodzik:


    Kod:
    string ruch_gracza(string r) {
    
            string adres = "127.0.0.1";
            string pakiet = "GET /index.php?a=abc&b=123"\r\n"
                             "Host: www.mojastrona.pl\r\n"
                             "User-Agent: Mozilla/4.0\r\n";
        
        char address[512];
        strcpy( address, adres.c_str() );
        char packet[1024];
        strcpy( packet, pakiet.c_str() );
        string odp= download(address,packet);
        
       
        
        return odp;
        
    };

    Mam tylko problem przy połączeniu z sub domeną. i nie bardzo wiem jak wyciągnąć ip z nazwy hosta. Z tym drugim sobie chyba poradzę jak po gogluje. Ale na subdomene nie mam żadnego pomysłu.
    Ostatnio edytowane przez quadro : 01-13-2010 - 00:10

  6. #16
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie

    Mam tylko problem przy połączeniu z sub domeną. i nie bardzo wiem jak wyciągnąć ip z nazwy hosta.
    kiedy uczyles sie socketow z jakiegos kursu to powinno cos pisac o tej funkcji, albo zle przestudiowales kurs , chyba ze uczyles sie z dokumentacji msdn, ale nie wnikam, mialem troche czasu na glupoty wiec łap:
    Kod:
    // inicjalizujemy funkcje winsock
       int ret;
       WSADATA d;
       ret = WSAStartup( MAKEWORD( 2,0 ), &d );
       if( ret != 0 ) puts( "inicjalizacja winsock[!]\r\n" );
       
       // tworzymy gniazdo tcp
       SOCKET sock;
       sock = socket( AF_INET, SOCK_STREAM, 0 );
       if( sock == INVALID_SOCKET ) puts( "tworzenie gniazda[!]\r\n" );
       
       // proba identyfikacji( pobrania IP ) hosta 
       HOSTENT *host;
       host = gethostbyname( "www.speedyshare.com" );
       if( host == NULL ) puts( "identyfikacja hosta[!]\r\n" );
       
       // wklejamy pobrany adres IP do struktury sockaddr_in w polu sin_addr.
       struct sockaddr_in addr;
       memcpy( &addr.sin_addr, host->h_addr_list[0], host->h_length );
       addr.sin_family = AF_INET;
       addr.sin_port = htons( 80 );
       // trudne bylo?

  7. #17
    Zarejestrowany
    Mar 2008
    Postów
    7

    Domyślnie

    i bardzo dobrze że nie wnikasz bo aż wstyd się przyznać jak zabieram się do nauki...

    Dzięki za kodzik, napewno się przyda.
    Mam jeszcze jedno głupie pytanie. W chwili wysyłania pakietu program na ułamek sekundy stoi w miejscu czekając na odpowiedź co jest raczej oczywiste. Tyle że chciałbym żeby w tym samym czasie program wykonywał pewną pętle. Czy jest to możliwe? Nie proszę o gotowe kody, tylko o jakieś naprowadzenie mnie. Lubie sam rozwiązywać takie problemy Z góry dzięki.

  8. #18
    Avatar GSG-9
    GSG-9 jest offline Shapeshifter
    Zarejestrowany
    Jul 2007
    Skąd
    C:\Perl\bin
    Postów
    1,578

    Domyślnie

    Cytat Napisał quadro Zobacz post
    i bardzo dobrze że nie wnikasz bo aż wstyd się przyznać jak zabieram się do nauki...

    Dzięki za kodzik, napewno się przyda.
    Mam jeszcze jedno głupie pytanie. W chwili wysyłania pakietu program na ułamek sekundy stoi w miejscu czekając na odpowiedź co jest raczej oczywiste. Tyle że chciałbym żeby w tym samym czasie program wykonywał pewną pętle. Czy jest to możliwe? Nie proszę o gotowe kody, tylko o jakieś naprowadzenie mnie. Lubie sam rozwiązywać takie problemy Z góry dzięki.
    musialbys pisac asynchronicznie, ale nie kodze w c/cpp takze mnie nie pytaj :P
    War, war never changes.

  9. #19
    Zarejestrowany
    Mar 2008
    Postów
    7

    Domyślnie

    Wielkie dzięki nie mam pojęcia jak dotychczas mogłem programować bez wątków

  10. #20
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie

    wątki w programie twórz za pomocą tej funkcji, nie poleca się CreateThread choć jest najpopularniejsza:

    _beginthread:
    Kod:
    uintptr_t _beginthread( 
       void( *start_address )( void * ),
       unsigned stack_size,
       void *arglist 
    );
    _beginthreadex:
    Kod:
    uintptr_t _beginthreadex( 
       void *security,
       unsigned stack_size,
       unsigned ( *start_address )( void * ),
       void *arglist,
       unsigned initflag,
       unsigned *thrdaddr 
    );
    CreateThread( nie polecam ):
    Kod:
    HANDLE WINAPI CreateThread(
      __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes,
      __in       SIZE_T dwStackSize,
      __in       LPTHREAD_START_ROUTINE lpStartAddress,
      __in_opt   LPVOID lpParameter,
      __in       DWORD dwCreationFlags,
      __out_opt  LPDWORD lpThreadId
    );

Podobne wątki

  1. Http
    By janiety in forum Newbie - dla początkujących!
    Odpowiedzi: 11
    Autor: 12-12-2007, 13:18
  2. ip - http
    By Danielos13 in forum Newbie - dla początkujących!
    Odpowiedzi: 38
    Autor: 09-16-2007, 22:37
  3. http 80
    By eryk in forum Hacking
    Odpowiedzi: 5
    Autor: 05-16-2007, 19:58

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj