[C/C++] Http Request mit C

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Knusperkeks, 25. Februar 2008 .

Schlagworte:
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 25. Februar 2008
    Http Request mit C

    Ich wollte nen http request in c machen aber ich finde einfach keine anleitung/bsp dafür!

    Ich hab gerade gegoogelt aber auch irgendwie nix gefunden!

    Hat wer was für mich?

    Knusperkeks
     

  2. Anzeige
    Heute: Deals & Sale mit stark reduzierten Angeboten finden.
  3. #2 25. Februar 2008
    AW: Http Request mit C

    Code:
    
    u_long dns(const char *host){ 
    
     struct hostent *hp; 
     u_long host_ip; 
    
     host_ip = inet_addr(host); 
     if(host_ip == INADDR_NONE){ 
     hp = gethostbyname(host); 
     if(!hp){ 
     return 0; 
     }else{ 
     host_ip = *(u_long *)hp->h_addr; 
     } 
     } 
     return host_ip; 
    }
    
    string HTTPRequest(const char* server, int port, string request)
    {
     WSADATA w; 
     int res = WSAStartup(MAKEWORD(2,0), &w);
     
    #ifdef DEBUG 
     if(res != 0) 
     { 
     printf("Winsock 2 konnte nicht gestartet werden!\n"); 
     }
     else 
     {
     printf("Winsock 2 gestartet!\n"); 
     }
    #endif
     
     int Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    
    #ifdef DEBUG 
     if(Socket == -1) 
     { 
     printf("Socket konnte nicht erstellt werden!\n"); 
     }
     else 
     {
     printf("Socket wurde erstellt!\n"); 
     } 
    #endif
     
     u_long ip = dns(server); 
     
     SOCKADDR_IN service; 
     service.sin_family = AF_INET;
     service.sin_port = htons(port);
     service.sin_addr.s_addr = ip;
     
     res = connect(Socket, (SOCKADDR *)(&service), sizeof(service));
     
    #ifdef DEBUG 
     if(res == -1) 
     { 
     printf("Verbindung fehlgeschlagen!\n");
     } 
     else 
     {
     printf("Verbindung erfolgreich!\n");
     }
    #endif
     
     res = send(Socket, request.c_str(), request.length(), 0);
     char buffer[BUFFER_SIZE];
     res = recv(Socket, buffer, sizeof(buffer) - 1, 0);
    
     buffer[res] = '\0';
     WSACleanup();
     
     return buffer; 
    }
    
    int main()
    {
     request = "GET /surf.php HTTP/1.1\r\n";
     request += "User-Agent: dein Browser\r\n";
     request += "Host: host.de\r\n";
     request += "Accept: */*\r\n";
     request += "Referer: Not your business\r\n";
     request += "Cookie: Nick=user; usPass= pass; PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n\r\n";
     
     temp = HTTPRequest("host.de", 80, request); 
    
     puts(temp)
     return 0;
    }
    
    
    
     
  4. #3 25. Februar 2008
  5. #4 28. Februar 2008
    AW: Http Request mit C

    Danke schonmal dafür, muss ich noch irgendwelche spezielle header einbinden oder reicht stdio.h ?

    Knusperkeks
     
  6. #5 28. Februar 2008
    AW: Http Request mit C

    Unter Windows die windows.h includen und gegen die ws2_32.lib (devcpp: libws2_32.a) compilen
    Unter unix sinds n paar mehr, aber ka welche genau
     
  7. #6 1. März 2008
    AW: Http Request mit C

    Nur mal so aus neugier (programmiere erst seit kurzer Zeit)..

    Was ist ein "http request".. was kann man damit z.B. machen?
     
  8. #7 1. März 2008
    AW: Http Request mit C

    auch wenns a weng offtopic is...

    damit kannst internet seiten aufrufen und dessen inhalt ausgeben lassen. du kannst auch via post oder get sachen an die seite schicken. sowas wie ein browser, nur ohne html-parser und oberfläche :D

    hier n beispiel aus meiner php-klasse:
    Code:
    $req = new mcSocket('google.de', mcSocket::CURL); 
    $req->bindGet('q', 'blah');
    $req->bindGet('hl', 'de');
    $req->sendTo('search');
    print $req->result;
     
  9. #8 1. März 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Http Request mit C

    PHP:
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>

    u_long dns (const  char  * host ){ 

       
    struct hostent  * hp
       
    u_long host_ip

        
    host_ip  inet_addr ( host ); 
        if(
    host_ip  ==  INADDR_NONE ){ 
            
    hp  gethostbyname ( host ); 
            if(!
    hp ){ 
               return 
    0
            }else{ 
               
    host_ip  = *( u_long  *) hp -> h_addr
           } 
        } 
        return 
    host_ip
    }

    string HTTPRequest (const  char server int port string request )
    {
        
    WSADATA w
        
    int res  WSAStartup ( MAKEWORD ( 2 , 0 ), & w );
     
    #ifdef DEBUG   
        
    if( res  !=  0
        { 
            
    printf ( "Winsock 2 konnte nicht gestartet werden!\n" ); 
        }
        else 
        {
            
    printf ( "Winsock 2 gestartet!\n" );     
        }
    #endif
        
        
    int Socket  socket ( AF_INET SOCK_STREAM IPPROTO_TCP ); 

    #ifdef DEBUG 
        
    if( Socket  == - 1
        { 
            
    printf ( "Socket konnte nicht erstellt werden!\n" ); 
        }
        else 
        {
            
    printf ( "Socket wurde erstellt!\n" );     
        }    
    #endif
        
        
    u_long ip  dns ( server ); 
        
        
    SOCKADDR_IN service
        
    service . sin_family  AF_INET ;
        
    service . sin_port  htons ( port );
        
    service . sin_addr . s_addr  ip ;
        
        
    res  connect ( Socket , ( SOCKADDR  *)(& service ),  sizeof ( service ));
        
    #ifdef DEBUG   
        
    if( res  == - 1
        { 
            
    printf ( "Verbindung fehlgeschlagen!\n" );
        } 
        else 
        {
            
    printf ( "Verbindung erfolgreich!\n" );
        }
    #endif
        
        
    res  send ( Socket request . c_str (),  request . length (),  0 );
        
    char buffer [ BUFFER_SIZE ];
        
    res  recv ( Socket buffer sizeof ( buffer ) -  1 0 );

        
    buffer [ res ] =  '\0' ;
        
    WSACleanup ();
        
        return 
    buffer ;      
    }

    int main ()
    {
        
    request    "GET /search?hl=de&q=http+request&btnG=Google-Suche&meta= HTTP/1.1\r\n" ;
        
    request  +=  "User-Agent: dein Browser\r\n" ;
        
    request  +=  "Host: www.google.de\r\n" ;
        
    request  +=  "Accept: */*\r\n" ;
        
    request  +=  "Accept-Encoding: text/html\r\n\r\n" ;
        
        
    temp  HTTPRequest ( "www.google.de" 80 request ); 

        
    puts ( temp )
        return 
    0 ;
    }
    und die fehler sind:

    [​IMG]

    Knusperkeks
     
  10. #9 1. März 2008
    AW: Http Request mit C

    Jo kein wunder wenn du strings in C verwendest :D
    Habs ma angepasst :S

    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    const int BUFFER_SIZE = 65535;
    
    u_long dns(const char *host){
    
     struct hostent *hp;
     u_long host_ip;
    
     host_ip = inet_addr(host);
     if(host_ip == INADDR_NONE){
     hp = gethostbyname(host);
     if(!hp){
     return 0;
     }else{
     host_ip = *(u_long *)hp->h_addr;
     }
     }
     return host_ip;
    }
    
    [COLOR="Lime"]char * HTTPRequest(const char* server, int port, char * request)[/COLOR]
    {
     WSADATA w;
     int res = WSAStartup(MAKEWORD(2,0), &w);
    
    #ifdef DEBUG 
     if(res != 0)
     {
     printf("Winsock 2 konnte nicht gestartet werden!\n");
     }
     else
     {
     printf("Winsock 2 gestartet!\n"); 
     }
    #endif
     
     int Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
    #ifdef DEBUG
     if(Socket == -1)
     {
     printf("Socket konnte nicht erstellt werden!\n");
     }
     else
     {
     printf("Socket wurde erstellt!\n"); 
     } 
    #endif
     
     u_long ip = dns(server);
     
     SOCKADDR_IN service;
     service.sin_family = AF_INET;
     service.sin_port = htons(port);
     service.sin_addr.s_addr = ip;
     
     res = connect(Socket, (SOCKADDR *)(&service), sizeof(service));
     
    #ifdef DEBUG 
     if(res == -1)
     {
     printf("Verbindung fehlgeschlagen!\n");
     }
     else
     {
     printf("Verbindung erfolgreich!\n");
     }
    #endif
     
    [COLOR="Lime"] res = send(Socket, request, strlen(request), 0);
     char *buffer = (char *) malloc(BUFFER_SIZE);
     res = recv(Socket, buffer, sizeof(buffer) - 1, 0);[/COLOR]
    
     buffer[res] = '\0';
     WSACleanup();
     
     return buffer;
    }
    
    int main()
    {
    [COLOR="Lime"] char request[] = 
     "GET /search?hl=de&q=http+request&btnG=Google-Suche&meta= HTTP/1.1\r\n" 
     "User-Agent: dein Browser\r\n"
     "Host: www.google.de\r\n"
     "Accept: */*\r\n"
     "Accept-Encoding: text/html\r\n\r\n";[/COLOR]
     
     char * temp = HTTPRequest("www.google.de", 80, request);
    
     puts(temp);
    
     // wichtig: mit free() wieder freigeben
    [COLOR="Lime"] free(temp);[/COLOR]
     return 0;
    } 
    das grüne wurde verändert.. hoffe es geht so
     
  11. #10 1. März 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Http Request mit C

    nun kommt:

    [​IMG]

    Knusperkeks
     
  12. #11 1. März 2008
    AW: Http Request mit C

    libcurl könnte dir da auch weiterhelfen. eine library für http,ftp usw :)
     

  13. Videos zum Thema
Die Seite wird geladen...
Similar Threads - C++ Http Request
  1. Antworten:
    2
    Aufrufe:
    1.113
  2. Antworten:
    1
    Aufrufe:
    654
  3. Antworten:
    0
    Aufrufe:
    359
  4. Antworten:
    11
    Aufrufe:
    762
  5. Antworten:
    2
    Aufrufe:
    809