Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:50

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



c++ Linux HTTP GET

Discussion on c++ Linux HTTP GET within the C/C++ forum part of the Coders Den category.

Closed Thread
 
Old   #1


 
elite*gold: 0
Join Date: Sep 2008
Posts: 526
Received Thanks: 82
c++ Linux HTTP GET

Hallo,

kann mir einer helfen, mittels c++ auf Linux ein HTTP GET auszuführen?
Habe mir schon ein paar sachen über sockets angeguckt, werde daraus aber nicht schlau. Habe auch was von libcurl gelesen nur bekomme ich es damit nicht hin.
Mozo_ is offline  
Old 11/19/2012, 21:27   #2
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Wie schaut dein derzeitiger Ansatz denn aus?
Nightblizard is offline  
Old 11/19/2012, 21:42   #3


 
elite*gold: 0
Join Date: Sep 2008
Posts: 526
Received Thanks: 82
Da ich nicht meinen kompletten code posten möchte, hier ein paar ausschnitte zu den sockets:


Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
Code:
struct sockaddr_in r;
struct hostent *http;
char buff[1024];
char tempo[1024];
int port = 80;
int s;
Code:
r.sin_family = AF_INET;
		r.sin_port = htons(80);
		r.sin_addr.s_addr = INADDR_ANY;
 
   
        strcpy(tempo, "GET /test.php?data=asdasd HTTP/1.1\r\nHost: www.test.de\r\n\r\n");
        s=socket(AF_INET, SOCK_STREAM, 0);
		if((connect(s, (struct sockaddr *)&r, sizeof(r))) == -1)
		{ 
			Msg("failed!");
		}
		else
		{
			send(s, tempo , sizeof(tempo) , 0);
		}
		close(s);
hoffe damit kannst du was anfangen.. er sendet den get befehl nicht ab nur weis ich nicht warum. (ist wie gesagt das 1. mal das ich mit sockets arbeite)



EDIT:


Ich habe den Code zum senden jetzt so:
Code:
sprintf(tempo, "GET /bla/test.php?data=%s HTTP/1.1\r\nHost:www.test.de:80\r\n\r\n",test.c_str());
s=socket(AF_INET, SOCK_STREAM, 0);
		if((connect(s, (struct sockaddr *)&r, sizeof(r))) == -1)
		{ 
			Msg("failed!");
		}
		else
		{
			if(send(s, tempo , strlen(tempo) , 0) < 0)
			{
				Msg("Senden Fehlgeschlagen!\n");
			} else {
				Msg("Senden erfolgreich!\n");
				Msg(tempo);
			}
		}
		close(s);
die variable "test" ist so definiert (nur ein beispiel, wird im programm durch andere werte definiert):
Code:
std::string test = "2,4.2,5.2,100,0;2,-278.205,-598.403,100,0;3,548.266,2235.47,100,0;";
ich bekomme beim ausführen immer die Nachricht "Senden erfolgreich" und die variable "tempo" wird auch (in meinen augen) richtig ausgegeben:
Code:
GET /bla/test.php?data=3,-446.315,1674.19,100,0;2,-436.193,192.15,100,0; HTTP/1.1
Host:www.test.de:80
Nur kommt der GET befehl anscheinend nicht an dem PHP script an, denn dieses soll die daten in eine mysql datenbank eintragen, was es aber nicht macht. ich hoffe mir kann jemand helfen

Keiner der mir helfen kann?
Mozo_ is offline  
Old 11/20/2012, 20:19   #4
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Code:
WSAData wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
ansonsten solltest du auch mal den return wert der socket funktion auf -1 (INVALID_SOCKET) prüfen
dann solltest du auch überhaupt mal richtig connecten, du gibst als ziel adresse INADDR_ANY an, was definitiv falsch ist!
Tyrar is offline  
Old 11/20/2012, 20:25   #5


 
elite*gold: 0
Join Date: Sep 2008
Posts: 526
Received Thanks: 82
Ist das WSAData und WSAStartup nicht nur für windows?
Was muss ich denn bei INADDR_ANY angeben? so wie ich das nachgelesen habe, akzeptiert er damit alle adressen

den socket üverprüfe ich doch schon mit:
Code:
if((connect(s, (struct sockaddr *)&r, sizeof(r))) == -1)
		{ 
			Msg("failed!");
		}
oder sehe ich das falsch?



okay, habe nun noch eine abfrage für den socket eingefügt, bekomme aber keinen error also sollte der ja stimmen.
Code:
if(s == -1)
{
	Msg("Socket Error");
}
Mozo_ is offline  
Old 11/20/2012, 21:21   #6
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Mozo_ View Post
Ist das WSAData und WSAStartup nicht nur für windows?
Was muss ich denn bei INADDR_ANY angeben? so wie ich das nachgelesen habe, akzeptiert er damit alle adressen

den socket üverprüfe ich doch schon mit:
Code:
if((connect(s, (struct sockaddr *)&r, sizeof(r))) == -1)
		{ 
			Msg("failed!");
		}
oder sehe ich das falsch?



okay, habe nun noch eine abfrage für den socket eingefügt, bekomme aber keinen error also sollte der ja stimmen.
Code:
if(s == -1)
{
	Msg("Socket Error");
}
die 2. abfrage meinte ich, das INADDR_ANY gilt nur für server, nicht für clients!
da nutzt man z.b. inet_addr("127.0.0.1")
Tyrar is offline  
Old 11/20/2012, 21:47   #7


 
elite*gold: 0
Join Date: Sep 2008
Posts: 526
Received Thanks: 82
auch mit inet_addr("127.0.0.1") funktioniert es nicht.
Er sagt mir weiterhin das der befehl gesendet wurde und tempo sieht so aus:
Code:
GET /bla/test.php?data=2,-428.213,443.497,100,0; HTTP/1.1
Host: www.test.de
Mozo_ is offline  
Old 11/21/2012, 08:49   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Läuft der Server denn auf deinem PC?
MrSm!th is offline  
Old 11/21/2012, 14:10   #9


 
elite*gold: 0
Join Date: Sep 2008
Posts: 526
Received Thanks: 82
nein, muss ich also bei "inet_addr("127.0.0.1")" die ip von dem server eintragen auf dem das php script liegt?

Okay, habe es hinbekommen

Danke für eure Hilfe !
Mozo_ is offline  
Old 11/22/2012, 17:39   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
#closed
MrSm!th is offline  
Closed Thread


Similar Threads Similar Threads
Warrock auf Linux ? (Kennt ihr auch andere Games für Linux)
09/11/2011 - WarRock - 7 Replies
Hallo, kann man Warrock auf Linux spielen ? Wenn nein kennt ihr Spiele genau wie Warrock die auch auf Linux gehen?
Metin2 auf Linux wer sich gut mit Linux auskennt sollte draufklicken^^
03/19/2011 - Metin2 - 1 Replies
Hallo Ich benützte zur zeit Linux da ich gehört habe dass Mann mit paar Programme zb. wine Windows spiele auf Linux spielen kann. Aber bei metin2 wenn ich das mit Wine starte tritt ein fehler auf weil Linux nicht unbekanntes downloadet. Habs mit Bypass versucht auf mein Windows7 ging es super mit bypass aber auf linux tritt Hackschield auf und lässt es nicht durch. so nun hab ich sehr lange gesucht und wollte wissen wie das gehen soll ich habe bei Metin2wiki die erklärung gefunden da ich...



All times are GMT +1. The time now is 10:50.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.