<?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 + php -&amp;gt; Seite laden]]></title><description><![CDATA[<p>Ich versuch eine Seite, wie zb <a href="http://www.c-plusplus.net/forum/viewforum.php?f=5" rel="nofollow">http://www.c-plusplus.net/forum/viewforum.php?f=5</a> zu laden. Mit normalen Seiten klappt das, doch mitsolchen parameterisierten php Seitenbekomme ich immer eine Fehler Seite zurück</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &lt;winsock.h&gt;
using namespace std;

#define DEBUG 1
#define PUFFERGROESSE 1024

class CHttpDownload {
    public:
        string host;
        int port;
        string url;
        string zieldatei;
        string antwortaufrufer;

        // ohne Proxy
        CHttpDownload(string url, string zieldatei) {
            int pos;
            if ((pos=url.find(&quot;http://&quot;))&gt;-1) {
                host=url.substr(pos+7,url.length());
                if ((pos=host.find(&quot;/&quot;))&gt;-1) {
                    host=host.substr(0,pos);
                }
            }
            else {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: die URL muss mit http:// anfangen!\n&quot;);
                return;
            }
            if (DEBUG==1) printf(&quot;CHttpDownload: Der Host ist: %s\n&quot;,host.c_str());
            this-&gt;host=host;
            this-&gt;port=80;
            this-&gt;url=url;
            this-&gt;zieldatei=zieldatei;
            httpDownload();
        }

        // mit Proxy
        CHttpDownload(string url, string zieldatei, string proxy, int port) {
            this-&gt;host=proxy;
            this-&gt;port=port;
            this-&gt;url=url;
            this-&gt;zieldatei=zieldatei;
            httpDownload();
        }

        ~CHttpDownload() {
        }

        void httpDownload () {
            struct sockaddr_in server;
            struct hostent *host_info;
            unsigned long addr;
            int bzaehler;
            int sock;
            char buffer[PUFFERGROESSE];

            int pos;

            /* Initialisiere TCP für Windows (&quot;winsock&quot;) */
            short wVersionRequested;
            WSADATA wsaData;
            wVersionRequested=MAKEWORD(1,1);
            if (WSAStartup(wVersionRequested,&amp;wsaData)!=0) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Windows-Sockets nicht initialisieren! Fehlercode: %d\n&quot;,WSAGetLastError());
                WSACleanup();
                return;
            }

            /* Erzeuge das Socket */
            sock=socket(PF_INET,SOCK_STREAM,0);
            if (sock&lt;0) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Socket nicht erzeugen! Fehlercode: %d\n&quot;,WSAGetLastError());
                closesocket(sock);
                WSACleanup();
                return;
            }

            /* Erzeuge die Socketadresse des Servers
               Sie besteht aus Typ, IP-Adresse und Portnummer */
            memset(&amp;server,0,sizeof(server));
            if ((addr=inet_addr(host.c_str()))!=INADDR_NONE) {
                /* argv[1] ist eine numerische IP-Adresse */
                memcpy((char *)&amp;server.sin_addr,&amp;addr,sizeof(addr));
            }
            else {
                /* Wandle den Servernamen in eine IP-Adresse um */
                host_info=gethostbyname(host.c_str());
                if (NULL==host_info) {
                    if (DEBUG==1) printf(&quot;*** CHttpDownload: Host %s ist unbekannt! Fehlercode: %d\n&quot;,host.c_str(),WSAGetLastError());
                    closesocket(sock);
                    WSACleanup();
                    return;
                }
                memcpy((char *)&amp;server.sin_addr,host_info-&gt;h_addr,host_info-&gt;h_length);
            }

            server.sin_family=AF_INET;
            server.sin_port=htons(port);

            /* Baue die Verbindung zum Server auf */
            if (connect(sock,(struct sockaddr*)&amp;server,sizeof(server))&lt;0) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Host %s nicht erreichen! Fehlercode: %d\n&quot;,host.c_str(),WSAGetLastError());
                closesocket(sock);
                WSACleanup();
                return;
            }

            HANDLE hZieldatei=CreateFile(zieldatei.c_str(),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
            if (hZieldatei==NULL) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Zieldatei %s nicht erstellen! Fehlercode: %d\n&quot;,zieldatei.c_str(),GetLastError());
                CloseHandle(hZieldatei);
                closesocket(sock);
                WSACleanup();
                return;
            }

            string getanfrage=&quot;GET &quot;+url+&quot;\r\nHost: &quot;+host+&quot;\r\nRange: bytes=0-\r\n\r\n&quot;;

            if (DEBUG==1) printf(&quot;CHttpDownload: GET-Anfrage:\n%s&quot;,getanfrage.c_str());

            send(sock,getanfrage.c_str(),strlen(getanfrage.c_str()),0);

            string antwort=&quot;&quot;;
            bool anfang=true;
            long dateilaenge=0;
            long erhalten=0;
            int headerlaenge=0;
            do {
                memset(&amp;buffer,0,sizeof(buffer));
                if ((bzaehler=recv(sock,buffer,sizeof(buffer),0))!=0) {

                    // um ein Abschneiden der Daten durch 0x00 (NULL) zu vermeiden:
                    for (int i=0; i&lt;PUFFERGROESSE; i++) antwort=antwort+buffer[i];

                    if (anfang) {
                        if ((pos=antwort.find(&quot;HTTP/1.1 200 OK&quot;))&gt;-1) {
                            if ((pos=antwort.find(&quot;Content-Length:&quot;))&gt;-1) {
                                headerlaenge=antwort.length();
                                string s=antwort.substr(pos+16,antwort.length());
                                pos=s.find(&quot;\r\n&quot;);
                                s=s.substr(0,pos);
                                dateilaenge=atoi(s.c_str());
                                pos=antwort.find(&quot;\r\n\r\n&quot;);
                                antwort=antwort.substr(pos+4,antwort.length());
                                bzaehler=bzaehler-(pos+4);
                                headerlaenge=headerlaenge-antwort.length();
                                anfang=false;
                            }
                            else {
                                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Dateilaenge nicht ermitteln!\n%s\n&quot;,antwort.c_str());
                                closesocket(sock);
                                CloseHandle(hZieldatei);
                                DeleteFile(zieldatei.c_str());
                                WSACleanup();
                                return;
                            }
                        }
                        else {
                            if (DEBUG==1) printf(&quot;*** CHttpDownload: GET-Anfrage schlug fehl!\n%s\n&quot;,antwort.c_str());
                            closesocket(sock);
                            CloseHandle(hZieldatei);
                            DeleteFile(zieldatei.c_str());
                            WSACleanup();
                            return;
                        }
                    }

                    if (DEBUG==1) printf(&quot;CHttpDownload: Daten:\n%s\n&quot;,antwort.c_str());
                    WriteFile(hZieldatei,antwort.c_str(),bzaehler,(DWORD *)&amp;bzaehler,NULL);
                    antwort=&quot;&quot;;
                    erhalten=erhalten+bzaehler;

                    char ptemp[10]; string s;
                    memset(&amp;ptemp,0,sizeof(ptemp));
                    ltoa(erhalten,ptemp,sizeof(ptemp)); s=ptemp;
                    antwortaufrufer=&quot;\r\n&quot;+s+&quot; of &quot;;
                    memset(&amp;ptemp,0,sizeof(ptemp));
                    ltoa(dateilaenge,ptemp,sizeof(ptemp)); s=ptemp;
                    if (DEBUG==1) printf(&quot;CHttpDownload: %d von %d Bytes uebertragen.\n&quot;,erhalten,dateilaenge);
                }
            }
            while (erhalten&lt;dateilaenge);

            closesocket(sock);
            CloseHandle(hZieldatei);
            WSACleanup();
            return;
        }

    private:
};

int main() {

    CHttpDownload httpdownload(&quot;http://www.c-plusplus.net/forum/viewforum.php?f=5&quot;, &quot;C:\\test.html&quot;);
    httpdownload.~CHttpDownload();

    getchar();
    return 0;
}
</code></pre>
<p>Das heißt, es gibt keine Fehler Meldung,sondern eine html seite,die mich darüber aufklärt, dass es die angeforderte seitenicht mehr gibt.<br />
Woran liegt das und wie kannman es besser machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138132/winsock-php-gt-seite-laden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 23:49:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138132.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Feb 2006 15:44:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Winsock + php -&amp;gt; Seite laden on Thu, 23 Feb 2006 15:44:50 GMT]]></title><description><![CDATA[<p>Ich versuch eine Seite, wie zb <a href="http://www.c-plusplus.net/forum/viewforum.php?f=5" rel="nofollow">http://www.c-plusplus.net/forum/viewforum.php?f=5</a> zu laden. Mit normalen Seiten klappt das, doch mitsolchen parameterisierten php Seitenbekomme ich immer eine Fehler Seite zurück</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &lt;winsock.h&gt;
using namespace std;

#define DEBUG 1
#define PUFFERGROESSE 1024

class CHttpDownload {
    public:
        string host;
        int port;
        string url;
        string zieldatei;
        string antwortaufrufer;

        // ohne Proxy
        CHttpDownload(string url, string zieldatei) {
            int pos;
            if ((pos=url.find(&quot;http://&quot;))&gt;-1) {
                host=url.substr(pos+7,url.length());
                if ((pos=host.find(&quot;/&quot;))&gt;-1) {
                    host=host.substr(0,pos);
                }
            }
            else {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: die URL muss mit http:// anfangen!\n&quot;);
                return;
            }
            if (DEBUG==1) printf(&quot;CHttpDownload: Der Host ist: %s\n&quot;,host.c_str());
            this-&gt;host=host;
            this-&gt;port=80;
            this-&gt;url=url;
            this-&gt;zieldatei=zieldatei;
            httpDownload();
        }

        // mit Proxy
        CHttpDownload(string url, string zieldatei, string proxy, int port) {
            this-&gt;host=proxy;
            this-&gt;port=port;
            this-&gt;url=url;
            this-&gt;zieldatei=zieldatei;
            httpDownload();
        }

        ~CHttpDownload() {
        }

        void httpDownload () {
            struct sockaddr_in server;
            struct hostent *host_info;
            unsigned long addr;
            int bzaehler;
            int sock;
            char buffer[PUFFERGROESSE];

            int pos;

            /* Initialisiere TCP für Windows (&quot;winsock&quot;) */
            short wVersionRequested;
            WSADATA wsaData;
            wVersionRequested=MAKEWORD(1,1);
            if (WSAStartup(wVersionRequested,&amp;wsaData)!=0) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Windows-Sockets nicht initialisieren! Fehlercode: %d\n&quot;,WSAGetLastError());
                WSACleanup();
                return;
            }

            /* Erzeuge das Socket */
            sock=socket(PF_INET,SOCK_STREAM,0);
            if (sock&lt;0) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Socket nicht erzeugen! Fehlercode: %d\n&quot;,WSAGetLastError());
                closesocket(sock);
                WSACleanup();
                return;
            }

            /* Erzeuge die Socketadresse des Servers
               Sie besteht aus Typ, IP-Adresse und Portnummer */
            memset(&amp;server,0,sizeof(server));
            if ((addr=inet_addr(host.c_str()))!=INADDR_NONE) {
                /* argv[1] ist eine numerische IP-Adresse */
                memcpy((char *)&amp;server.sin_addr,&amp;addr,sizeof(addr));
            }
            else {
                /* Wandle den Servernamen in eine IP-Adresse um */
                host_info=gethostbyname(host.c_str());
                if (NULL==host_info) {
                    if (DEBUG==1) printf(&quot;*** CHttpDownload: Host %s ist unbekannt! Fehlercode: %d\n&quot;,host.c_str(),WSAGetLastError());
                    closesocket(sock);
                    WSACleanup();
                    return;
                }
                memcpy((char *)&amp;server.sin_addr,host_info-&gt;h_addr,host_info-&gt;h_length);
            }

            server.sin_family=AF_INET;
            server.sin_port=htons(port);

            /* Baue die Verbindung zum Server auf */
            if (connect(sock,(struct sockaddr*)&amp;server,sizeof(server))&lt;0) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Host %s nicht erreichen! Fehlercode: %d\n&quot;,host.c_str(),WSAGetLastError());
                closesocket(sock);
                WSACleanup();
                return;
            }

            HANDLE hZieldatei=CreateFile(zieldatei.c_str(),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
            if (hZieldatei==NULL) {
                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Zieldatei %s nicht erstellen! Fehlercode: %d\n&quot;,zieldatei.c_str(),GetLastError());
                CloseHandle(hZieldatei);
                closesocket(sock);
                WSACleanup();
                return;
            }

            string getanfrage=&quot;GET &quot;+url+&quot;\r\nHost: &quot;+host+&quot;\r\nRange: bytes=0-\r\n\r\n&quot;;

            if (DEBUG==1) printf(&quot;CHttpDownload: GET-Anfrage:\n%s&quot;,getanfrage.c_str());

            send(sock,getanfrage.c_str(),strlen(getanfrage.c_str()),0);

            string antwort=&quot;&quot;;
            bool anfang=true;
            long dateilaenge=0;
            long erhalten=0;
            int headerlaenge=0;
            do {
                memset(&amp;buffer,0,sizeof(buffer));
                if ((bzaehler=recv(sock,buffer,sizeof(buffer),0))!=0) {

                    // um ein Abschneiden der Daten durch 0x00 (NULL) zu vermeiden:
                    for (int i=0; i&lt;PUFFERGROESSE; i++) antwort=antwort+buffer[i];

                    if (anfang) {
                        if ((pos=antwort.find(&quot;HTTP/1.1 200 OK&quot;))&gt;-1) {
                            if ((pos=antwort.find(&quot;Content-Length:&quot;))&gt;-1) {
                                headerlaenge=antwort.length();
                                string s=antwort.substr(pos+16,antwort.length());
                                pos=s.find(&quot;\r\n&quot;);
                                s=s.substr(0,pos);
                                dateilaenge=atoi(s.c_str());
                                pos=antwort.find(&quot;\r\n\r\n&quot;);
                                antwort=antwort.substr(pos+4,antwort.length());
                                bzaehler=bzaehler-(pos+4);
                                headerlaenge=headerlaenge-antwort.length();
                                anfang=false;
                            }
                            else {
                                if (DEBUG==1) printf(&quot;*** CHttpDownload: Konnte Dateilaenge nicht ermitteln!\n%s\n&quot;,antwort.c_str());
                                closesocket(sock);
                                CloseHandle(hZieldatei);
                                DeleteFile(zieldatei.c_str());
                                WSACleanup();
                                return;
                            }
                        }
                        else {
                            if (DEBUG==1) printf(&quot;*** CHttpDownload: GET-Anfrage schlug fehl!\n%s\n&quot;,antwort.c_str());
                            closesocket(sock);
                            CloseHandle(hZieldatei);
                            DeleteFile(zieldatei.c_str());
                            WSACleanup();
                            return;
                        }
                    }

                    if (DEBUG==1) printf(&quot;CHttpDownload: Daten:\n%s\n&quot;,antwort.c_str());
                    WriteFile(hZieldatei,antwort.c_str(),bzaehler,(DWORD *)&amp;bzaehler,NULL);
                    antwort=&quot;&quot;;
                    erhalten=erhalten+bzaehler;

                    char ptemp[10]; string s;
                    memset(&amp;ptemp,0,sizeof(ptemp));
                    ltoa(erhalten,ptemp,sizeof(ptemp)); s=ptemp;
                    antwortaufrufer=&quot;\r\n&quot;+s+&quot; of &quot;;
                    memset(&amp;ptemp,0,sizeof(ptemp));
                    ltoa(dateilaenge,ptemp,sizeof(ptemp)); s=ptemp;
                    if (DEBUG==1) printf(&quot;CHttpDownload: %d von %d Bytes uebertragen.\n&quot;,erhalten,dateilaenge);
                }
            }
            while (erhalten&lt;dateilaenge);

            closesocket(sock);
            CloseHandle(hZieldatei);
            WSACleanup();
            return;
        }

    private:
};

int main() {

    CHttpDownload httpdownload(&quot;http://www.c-plusplus.net/forum/viewforum.php?f=5&quot;, &quot;C:\\test.html&quot;);
    httpdownload.~CHttpDownload();

    getchar();
    return 0;
}
</code></pre>
<p>Das heißt, es gibt keine Fehler Meldung,sondern eine html seite,die mich darüber aufklärt, dass es die angeforderte seitenicht mehr gibt.<br />
Woran liegt das und wie kannman es besser machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001239</guid><dc:creator><![CDATA[winy]]></dc:creator><pubDate>Thu, 23 Feb 2006 15:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock + php -&amp;gt; Seite laden on Thu, 23 Feb 2006 19:13:02 GMT]]></title><description><![CDATA[<p>Versuch mal das hier:</p>
<pre><code class="language-cpp">string getanfrage=&quot;GET &quot;+url+&quot; HTTP/1.1\r\nHost: &quot;+host+&quot;\r\nRange: bytes=0-\r\n\r\n&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1001429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001429</guid><dc:creator><![CDATA[freaked]]></dc:creator><pubDate>Thu, 23 Feb 2006 19:13:02 GMT</pubDate></item><item><title><![CDATA[Reply to Winsock + php -&amp;gt; Seite laden on Thu, 23 Feb 2006 21:48:19 GMT]]></title><description><![CDATA[<p>Vielen Dank für die präzise Hilfe, hilft jedoch leider nichts. Alles unverändert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001543</guid><dc:creator><![CDATA[winy]]></dc:creator><pubDate>Thu, 23 Feb 2006 21:48:19 GMT</pubDate></item></channel></rss>