#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 + Multi-Zitat Zitieren
#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; } + Multi-Zitat Zitieren
#3 25. Februar 2008 AW: Http Request mit C das hier sollte dir weiterhelfen: http://www.pronix.de/pronix-25.html greez myth + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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 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; + Multi-Zitat Zitieren
#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: Knusperkeks + Multi-Zitat Zitieren
#9 1. März 2008 AW: Http Request mit C Jo kein wunder wenn du strings in C verwendest 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 + Multi-Zitat Zitieren
#10 1. März 2008 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Http Request mit C nun kommt: Knusperkeks + Multi-Zitat Zitieren
#11 1. März 2008 AW: Http Request mit C libcurl könnte dir da auch weiterhelfen. eine library für http,ftp usw + Multi-Zitat Zitieren