|
You last visited: Today at 10:50
Advertisement
c++ Linux HTTP GET
Discussion on c++ Linux HTTP GET within the C/C++ forum part of the Coders Den category.
11/19/2012, 20:08
|
#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.
|
|
|
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?
|
|
|
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?
|
|
|
11/20/2012, 20:19
|
#4
|
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!
|
|
|
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");
}
|
|
|
11/20/2012, 21:21
|
#6
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by Mozo_
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")
|
|
|
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
|
|
|
11/21/2012, 08:49
|
#8
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Läuft der Server denn auf deinem PC?
|
|
|
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 !
|
|
|
11/22/2012, 17:39
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
#closed
|
|
|
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.
|
|