<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Winsock http-get Frage]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich möchte mich gerne mal etwas näher mit dem Winsock beschäftigen und wollte als erstes Mal eine simple Http Get abfrage versuchen. Ich hab zwar schon einen Thread hier gefunden wo die Schritte grundsätzlich erklärt wurden , allerdings ohne Code-Beispiel. Hat jemand ein Codebeispiel für eine Http-Get-Anfrage, damit man das ganze ein bisschen leichter nachvollziehen kann?</p>
<p>Danke &amp; LG Steven</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/106073/winsock-http-get-frage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 01:03:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/106073.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2005 18:05:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 05 Apr 2005 18:05:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich möchte mich gerne mal etwas näher mit dem Winsock beschäftigen und wollte als erstes Mal eine simple Http Get abfrage versuchen. Ich hab zwar schon einen Thread hier gefunden wo die Schritte grundsätzlich erklärt wurden , allerdings ohne Code-Beispiel. Hat jemand ein Codebeispiel für eine Http-Get-Anfrage, damit man das ganze ein bisschen leichter nachvollziehen kann?</p>
<p>Danke &amp; LG Steven</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760562</guid><dc:creator><![CDATA[Steven_neu]]></dc:creator><pubDate>Tue, 05 Apr 2005 18:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 05 Apr 2005 18:51:05 GMT]]></title><description><![CDATA[<p>Wenn ich dich wäre, würde ich's einfach mal versuchen.<br />
Mit CInternetSession und CHttpConnection sollte es keine grosse Sache sein -&gt; MSDN/Forum<br />
Wenn du Probleme hast, kannst du ja wider fragen.<br />
brot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760606</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Tue, 05 Apr 2005 18:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 05 Apr 2005 21:56:49 GMT]]></title><description><![CDATA[<p>Nee wollte es eigentlich mit Winsock pur versuchen, also ohne jegliche weitere Komponenten. Und genau dafür suche ich auch ein Beispiel, weil so ganz habe ich da noch nicht durchgeblickt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760734</guid><dc:creator><![CDATA[Steven_neu]]></dc:creator><pubDate>Tue, 05 Apr 2005 21:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Wed, 06 Apr 2005 04:48:52 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=275" rel="nofollow">Unix-Tom</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC mit dem Visual C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/760763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760763</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 06 Apr 2005 04:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Wed, 06 Apr 2005 05:06:55 GMT]]></title><description><![CDATA[<p><a href="http://www.c-worker.ch" rel="nofollow">www.c-worker.ch</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/760768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760768</guid><dc:creator><![CDATA[elise]]></dc:creator><pubDate>Wed, 06 Apr 2005 05:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Sun, 17 Apr 2005 14:02:58 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antwort. Hab mir jetzt mal ein Stück Code zu http het zusammengebastelt, leider funktioniert es nicht.</p>
<p>Hier der Code-Schnipsel</p>
<pre><code class="language-cpp">BYTE cServer_Address[256] = &quot;www.familientreffen2005.de&quot;;
        BYTE cFile_Name[256] =&quot;/Test.txt&quot;;
        char sen[100];
	long rc;
	SOCKET s;
	SOCKADDR_IN addr;
	WSADATA wsa;
        //Das Klappt
	rc = WSAStartup(MAKEWORD(2,0),&amp;wsa);
	HOSTENT* he;´
        //Das Klappt auch
	he=gethostbyname((const char*)cServer_Address);
	if (he != NULL)
	{
		int i = 0;
		while(he-&gt;h_addr_list[i])  
		{
			addr.sin_addr.s_addr=*((long*)he-&gt;h_addr_list[i++]);
		}
	}
	if((addr.sin_addr.s_addr=inet_addr((const char*)cServer_Address))==INADDR_NONE) strncpy((char*)&amp;addr.sin_addr.s_addr,he-&gt;h_addr,4);
	else addr.sin_addr.s_addr=inet_addr((char*) cServer_Address);
	if(addr.sin_addr.s_addr==INADDR_NONE)
	{
		return false;
	}
	//Das Klappt
        if(s=socket(AF_INET,SOCK_STREAM,0) == INVALID_SOCKET)
	{
		return false;
	}
	memset(&amp;addr,0,sizeof(SOCKADDR_IN));
	addr.sin_family=AF_INET;
	addr.sin_port=htons(80);
        // Hier bekomme ich für rc immer den Wert -1 also SOCKET_ERROR. Wenn ich    // bei cServer_Address statt der Domain gleich die Server Adresse eingeben 
// klappt connect aber bei recv weiter unten erhalte ich dann -1
	rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
	string FileName = &quot;GET &quot; + (string) (char*) cFile_Name + &quot; HTTP/1.1\r\n&quot;;
	char* in_buf;
	string Dir = &quot;&quot;;
	if(rc!=SOCKET_ERROR)
	{
		strcpy(sen,FileName.c_str());
		send(s,sen,100,0);
		send(s, &quot;Connection: Keep-Alive\r\n&quot;, 100, 0);
		send(s, &quot;User-Agent: DeinClient\r\n&quot;, 100, 0);
		send(s, &quot;Host: www.tiscali.de:80\r\n&quot;, 100, 0);
		send(s, &quot;Accept: */*\r\n\r\n&quot;, 100, 0);
		rc = recv(s, in_buf, sizeof(in_buf), 0);
</code></pre>
<p>Wie gesagt wenn ich zuerst versuche mit gehostbyname die Domain aufzulösen erhalte ich schon bei connect für rc = -1, wenn ich bei cServer_Address gleich die ip des Servers eingebe, klappt connect aber dafür erhalte ich später bei recv für rc = - 1. Kann mir jemand sagen was ich falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/768883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/768883</guid><dc:creator><![CDATA[seddto]]></dc:creator><pubDate>Sun, 17 Apr 2005 14:02:58 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Sun, 17 Apr 2005 17:30:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">memset(&amp;addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
</code></pre>
<p>memset &lt;= Du leerst die komplette Struktur.<br />
sin_family &lt;= Du setzt sin_family<br />
sin_port &lt;= Du setzt den Port<br />
sin_addr &lt;= Du setzt nicht die Ziel-IP ?!<br />
connect() &lt;= Du verbindest dich mit 0.0.0.0:80 ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/769004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/769004</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 17 Apr 2005 17:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Sun, 17 Apr 2005 20:00:29 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe! Das war wirklich ein doofer Fehler. Ich hab den Source jetzt geändert und zwar so:</p>
<pre><code class="language-cpp">BYTE cServer_Address[256] = &quot;www.familien-treffen.net&quot;;
        BYTE cFile_Name[256] =&quot;/Test.txt&quot;;
        char sen[100];
	long rc;
	SOCKET s;
	SOCKADDR_IN addr;
	WSADATA wsa;
	rc = WSAStartup(MAKEWORD(2,0),&amp;wsa);
	HOSTENT* he;
	memset(&amp;addr,0,sizeof(SOCKADDR_IN));
	addr.sin_family=AF_INET;
	addr.sin_port=htons(80);
	// Host auflösen
	he=gethostbyname((const char*)cServer_Address);
	if((addr.sin_addr.S_un.S_addr=inet_addr((const char*)cServer_Address))==INADDR_NONE) 
	{
		//Ip einlesen
		strncpy((char*)&amp;addr.sin_addr.S_un.S_addr,he-&gt;h_addr,4);
	}
	else 
	{
		addr.sin_addr.S_un.S_addr =inet_addr((char*) cServer_Address);
	}
	//IP jetzt richtig?
	if(addr.sin_addr.S_un.S_addr==INADDR_NONE)
	{
		return false;
	}
	//Dann verbinden
	rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
	string FileName = &quot;GET &quot; + (string) (char*) cFile_Name + &quot; HTTP/1.1\r\n&quot;;
	//rc ergibt immer noch -1, jetzt mit der Fehlermeldung 10038 = Operation on Non-Socket
	int Error = WSAGetLastError();
</code></pre>
<p>Allerdings bekomme ich bei connect immer noch -1 und GetLastError liefert den fehlercode 10038 = Operation on Non-Socket. Hat jemand eine Ahnung wo jetzt der Fehler liegt? Schau nicht so ganz durch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/769107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/769107</guid><dc:creator><![CDATA[seddto]]></dc:creator><pubDate>Sun, 17 Apr 2005 20:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Sun, 17 Apr 2005 20:37:25 GMT]]></title><description><![CDATA[<p>Jetzt sehe ich vor dem connect() nirgendswo mehr dieses:<br />
s=socket(AF_INET,SOCK_STREAM,0);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/769126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/769126</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 17 Apr 2005 20:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Sun, 17 Apr 2005 20:46:45 GMT]]></title><description><![CDATA[<p>Eine interessante Seite neben dem c-worker tutorial ist übrigens auch diese:<br />
<a href="http://rcswww.urz.tu-dresden.de/~s3060864/kompendium/" rel="nofollow">http://rcswww.urz.tu-dresden.de/~s3060864/kompendium/</a><br />
- nur mal so nebenbei erwähnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/769131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/769131</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 17 Apr 2005 20:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Mon, 18 Apr 2005 20:34:53 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich habe es jetzt hingekriegt mich zu verbinden und eine korrekte http get-Anfrage zu stellen, aller Anfang ist eben schwer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Allerdings hab ich jetzt das Problem, das die Daten offenbar nicht korrekt übertragen werden. Es kommt zu erst der normale Server-Header und dann hab ich zum testen mit http get mal versucht eine Datei zu laden, die auf dem Webspace liegt. Es handelt sich dabei um eine Zip Datein die 98 kb groß ist: Hier ist der Codeausschnitt:</p>
<pre><code class="language-cpp">string Buffer;
	string Dir = &quot;&quot;;
	int len = sprintf(sen,
		&quot;GET /Test.zip HTTP/1.1\r\n&quot;
		&quot;Connection: Keep-Alive\r\n&quot;
		&quot;User-Agent: DeinClient\r\n&quot;
		&quot;Host: www.lovehits.net:80\r\n&quot;
		&quot;Accept: */*\r\n\r\n&quot;);
	string Uebertrag = &quot;&quot;;
	if(rc!=SOCKET_ERROR)
	{
		for (int i = 0; i &lt; len; i += rc) 
		{
            rc = send(s, sen + i, len - i, 0);
        }
		try
		{	
			int i = 0;
			while (rc &gt; 0)
			{
				rc = recv(s, in_buf, sizeof(in_buf), 0);
				//Dateigröße 98 kb -&gt; Nach dem Empfangen sind im String aber nur 3 kb.
				Uebertrag += in_buf;
				// Zähler steht nach dem Empfangen auf 103168, scheint also richtig zu sein.
				i += 256;
			}
		}
		catch(...)
		{
		}
</code></pre>
<p>Von der Datei stehen nachher aber nur 3 kb im String. Weil in_buf ja eine Größe von 256 hat, dachte ich ich zähle mal mit ob das runterladen evtl zu früh abgebrochen wird, aber der Zähler i steht nachher bei 103168, käme bei einer Dateigröße von 98 kb ja hin oder? Aber wieso stehen im String nur 3 kb?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/769896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/769896</guid><dc:creator><![CDATA[seddto]]></dc:creator><pubDate>Mon, 18 Apr 2005 20:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 19 Apr 2005 06:29:54 GMT]]></title><description><![CDATA[<p>in_buf ist ein char* denk ich mal, oder?<br />
der wird bei 0 terminiert, wenn du den an den std::string anhängen möchtest musst du append() benutzten (glaub ich) und auch die länge des anzuhängenden stücks angeben</p>
<p>bei rc = recv(...) steht in rc die empfangenen bytes die du zu deiner countervriable hinzuzählen musst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/770015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/770015</guid><dc:creator><![CDATA[-Foo-]]></dc:creator><pubDate>Tue, 19 Apr 2005 06:29:54 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 19 Apr 2005 19:07:09 GMT]]></title><description><![CDATA[<p>Ich habs jetzt mal mit append probiert:</p>
<pre><code class="language-cpp">while (rc &gt; 0)
			{
				rc = recv(s, in_buf, sizeof(in_buf), 0);
				//Dateigröße 98 kb -&gt; Nach dem Empfangen sind im String jetzt 4 kb, ist schon ein kb mehr als bei ersten Versuch ;)
				Uebertrag.append(in_buf, sizeof(in_buf));
				// Zähler steht nach dem Empfangen auf 103168, scheint also richtig zu sein.
				i += rc;
			}
</code></pre>
<p>Jetzt sind im String nach dem Empfang 4075 Zeichen (also 4 kb). i steht nach dem EMpfangen übrigens immer noch auf einem Wert über 100000, es scheint also wirklich die ganze Datei empfangen zu werden, aber in den String werden nur 4 kb reingeschrieben. Ich möchte die Datei einfach empfangen, die Http-Header rausfiltern und dann das ganze in eine neue Datei speichern auf der Festplatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/770636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/770636</guid><dc:creator><![CDATA[seddto]]></dc:creator><pubDate>Tue, 19 Apr 2005 19:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 19 Apr 2005 19:21:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while (rc &gt; 0)
            {
                rc = recv(s, in_buf, sizeof(in_buf), 0);
if( rc &lt; 1 ) break;
                //Dateigröße 98 kb -&gt; Nach dem Empfangen sind im String jetzt 4 kb, ist schon ein kb mehr als bei ersten Versuch ;)
                Uebertrag.append(in_buf, rc);
                // Zähler steht nach dem Empfangen auf 103168, scheint also richtig zu sein.
                i += rc;
            }
</code></pre>
<p>theoretisch müsste das so gehen... glaub ich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/770642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/770642</guid><dc:creator><![CDATA[-Foo-]]></dc:creator><pubDate>Tue, 19 Apr 2005 19:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 19 Apr 2005 19:24:13 GMT]]></title><description><![CDATA[<p>Also mit rc statt sizeof(in_buf) hatte ichs auch schon probiert, mit dem gleichen Ergebnis - wieder nur 4 kb im String. Weiss langsam echt nicht mehr was falsch ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/770647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/770647</guid><dc:creator><![CDATA[seddto]]></dc:creator><pubDate>Tue, 19 Apr 2005 19:24:13 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock http-get Frage on Tue, 19 Apr 2005 20:05:31 GMT]]></title><description><![CDATA[<p>Okay habe das Problem jetzt glaub ich etwas näher eingekreist. Ich hab mir mal angeschaut, was in dem Buffer in_buf steht und was dann wirklich in den String kopiert wird. Der Buffer hat an vielen Stellen das zeichen 0 stehen (''), das natürlich nicht mit in den String kopiert wird. Deshalb ist das Ergebnis das im String steht nachher deutlich kleiner als der Ursprung der eingelesen wurde. Deshalb zwei Fragen. Warum steht an sovielen Stellen 0 = '' im Buffer(oder vielleicht noch andere Zeichen die nicht mitkopiert werden?? Sind ja insgesamt 98kb -&gt; 3kb), ist das normal wenn ich eine Datei über http get einlese? Wie kann ich alle Zeichen in den string übertragen, damit ich die Datei wieder 1 zu 1 auf die Festplatte schreiben kann und eine komplette lauffähige Datei erhalte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/770684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/770684</guid><dc:creator><![CDATA[seddto]]></dc:creator><pubDate>Tue, 19 Apr 2005 20:05:31 GMT</pubDate></item></channel></rss>