Http & Socket Problem...
-
Was ist denn dieser zweite "Hypertext Transfer Protocol" Abschnitt auf dem Bild von deinem Paket, das gehört doch nicht dahin, oder? Die Hex-Daten darin heißen "fertig". Ist dir da doch irgendwie noch was rein gerutscht? Im Code hier sehe ich nix verkehrtes.
-
Ist wohl ein "\n" zuviel.
-
Auch nicht das Problem, aber: SendAll macht kein Error-Checking, und das selbe was du bei SendAll machst (in Schleife aufrufen bis alles gesendet wurde) musst du bei recv() auch machen.
Bzw. eigentlich nur bei recv(), denn send() verschickt bei blocking Sockets immer alles, da kann man sich die Schleife auch sparen. Bei recv() wirst du allerdings definitiv ein Problem bekommen, wenn die Antwort mal etwas grösser wird.
-
@fdfdg das frage ich mich ja auch^^... aber da ist eigentlich nichts zwischengerutscht...
@HighLigerBiMBam und wo bitte ;)?
@hustbaer mhh jo ok... aber im moment hab ich halt noch nen viel grösseres problem, als das ich nicht die komplette antwort bekomme^^
thx mfg
-
GET HTTP 1.1 -> Pfad / fehlt und hier auch HTTP**/**1.1.
GET / HTTP/1.1 muss es heissen.
-
hey danke deine antwort war echt hilfreich...
also es lag an folgendem...Meine version:
GET / HTTP 1.1Und so muss es sein:
GET / HTTP/1.1danke bis hier hin
und wenn mir jetzt noch einer sagen könnte wie ich mit großen tcp antworten umgehe bin ich wirklich sehr dankbar 
mfg
-
Http Noob schrieb:
Hey Leute

...naja die grundlagen kann ich aber eigentlich (oop und klassen & syntax etc)...Natürlich

Sieht man auch gut an deinem code.
Kleines Beispiel:Http Noob schrieb:
string Http::GetSubHost(string sUrl) // Example: 'http://google.de/index.php' -> 'google.de' { string tUrl; string bUrl; string Host; if(sUrl[0] == 'h' && sUrl[1] == 't' && sUrl[2] == 't' && sUrl[3] == 'p' && sUrl[4] == ':' && sUrl[5] == '/' && sUrl[6] == '/') // Check if starts with 'http://' { for(unsigned int c = 7; c < sUrl.size(); c++) { tUrl += sUrl[c]; } } else { tUrl = sUrl; } for(unsigned int c = 0; c < tUrl.size(); c++) { if(tUrl[c] == '/') break; Host += tUrl[c]; } Http::Host = Host; return Host; }Alternative:
std::string trim(const std::string& url) { std::string host(url); if (host.find("http://")==0) host.erase(0,7); return host.substr(0,host.find("/")); }
-
Sehr schön du schlaumeier^^
Da ich keine lust hatte mich in die methoden der strings einzulesen hab ichs einfach selfmade erstma gemacht ...
-
Http Noob schrieb:
und wenn mir jetzt noch einer sagen könnte wie ich mit großen tcp antworten umgehe bin ich wirklich sehr dankbar

Du musst recv in einer Schleife aufrufen und zwischen 1. Transfer-Encoding: chunked, 2. Content-Length und 3. Simple (gulp) unterscheiden.
Das wirst du nicht in einem Tag hinkriegen.
also etwa so:
recv bis der header komplett ist, dann den header analysieren und dann wie oben angedeutet fortfahren.
-
Das ist doch in dem Artikel gut erklärt:
-
@EOP: Connection=Close und Content-Length sind relativ einfach hinzubekommen. Und Transfer-Encoding: chunked muss man ja nicht akzeptieren - gibt ja auch noch HTTP 1.0.
-
naja ihr habt mir mit euren tipps schonmal sehr gehilfen bisher

Ich werde da morgen einfach nen bischen rumprobiern werde das schon irgendwie hinbekommen^^thx