Frage

In Ordnung Ich habe gut drei Tage versucht dies verbracht, hier ist das Szenario:

Ich will eine ‚.csv‘ Datei von Google herunterladen und dann Dinge zu tun mit den Daten aus der Datei. Es ist für eine Win32-Konsolenanwendung. Ich habe das letzteres nach unten, ich kann einfach nicht für das Leben von mir herauszufinden, wie die Datei zum Download bereit. Ich habe von libcurl, curlpp, ptypes hört, meine eigenen Rollen, nur den .NET-API und ein paar Mal gesagt:

  

... es ist nur eine GET-Anfrage

Nun, das ist alles schön und gut, aber ich muss etwas fehlt, weil es wie jeder scheint gerade geboren war zu wissen, wie dies zu tun. Ich habe durch Bücher wurde Kämme suchen, dies herauszufinden und hatte sogar ein riesiges Problem mit LNKerrors nach einer Reise die Straße hinunter mit „The Art of C ++“ für eine Weile.

Alles wird gesagt, ich habe eine Menge daraus gelernt, aber an dieser Stelle möchte ich nur wissen, wie es zu tun. Die API für C ++ ist ernsthaft fehlt, kein Beispiel-Code zu finden. Online-Tutorials sind fast nicht existent. Und kein Buch da draußen scheint wichtig dies ist zu denken.

Kann jemand bitte werfen Sie mir eine Rettungsinsel? Ich bin ein Mann am Rande hier.

Bearbeiten

Mit dem „von Google“ meine ich, dass ich eine CSV-Datei herunterladen möchten, dass sie Gastgeber. Ein Beispiel kann sein hier.

War es hilfreich?

Lösung

Es soll möglich sein, diese deinen Willen beugen.

Nun, da ich irgendwie Ihre Frage beantwortet haben. Warum C ++? Nichts gegen die Sprache, sondern die beste Sprache für den Job auswählen. Perl, PHP und Python (und ich bin sicher, dass mehr) haben alle große Dokumentation und Support auf diese Art von Operation.

In Perl (die ich kenne), es ist nur etwa 3-5 Zeilen Code.

Andere Tipps

Warum nicht einfach mit, was schon da ist?

URLDownloadToFile ()

Da Sie auf der Win32-Plattform sind, dann ist es eine in libary gebaut Sie eine GET-Anforderung in ein verwenden zu implementieren relativ einfache Art und Weise: WinInet, die einen Teil des Win32-SDK ist. Die grundlegende Referenz für WinInet auf MSDN.

Seien Sie gewarnt, es gibt einige grobe Schlitten voraus sein, wenn Sie mit dem Win32-API nicht vertraut sind. Es ist ein ziemlich Nutzblocks von Beispielcode hier

Sie werden Linker Fehler erhalten, wenn Sie nicht die entsprechende Bibliothek Verweis auf einem Projekt hinzuzufügen. Es klingt wie Sie einige Lektionen bereits gelernt haben, so werde ich es halten breif, aber sicher sein, dass Sie Verweise auf beiden Bibliotheken und Header-Dateiverweise finden Sie in der Win32-Dokumentation benötigen (Sie müssen nur lernen, wo auf die Seite danach suchen).

Sie können nicht mit der Standardbibliothek tun. Da es win32 ist, können Sie Paul Keister Rat folgen.

Aber einen Blick auf Libcurl , und da Sie in C ++ sind, würde ich empfehlen, POCO es ist sehr nützlich, auch. Sie sind sehr nützliche Werkzeuge!

Eine weitere Option ist WinHTTP , die auch wird mit Windows.

> kein Beispielcode gefunden werden

???

Dutzende von Proben wurden für 15 Jahre geschrieben .. Siehe auf der api ng news: //comp.os.ms-windows.programmer.win32 (Proben in C)

(COM, INET, usw.)

Auch ich habe gesucht, für eine gute http lib für C ++, aber nicht den ‚perfekten‘ lib. Boost.Asio ist fantastisch, aber recht niedriges Niveau eine einfache hTTP-Bibliothek (obwohl die hTTP-Client-Beispiele sind ein guter Anfang). Die C ++ Networking-Bibliothek * (CPP-netlib) sieht aus wie es auf dem richtigen Weg ist, den Aufbau eines höheren -Niveau api oben auf Asio, ist aber nicht sehr ausgereift. Schauen Sie sich die http_client Beispiel .

Ich bin entweder werde meinen eigenen Wrapper um Asio zu schreiben oder zu verlängern (und tragen) zu cpp-netlib, wenn ich nicht eine bessere Option gibt.

(BTW Libcurl heißt nicht eine bessere Option für mich. Es ist eine viel größere api als ich will und sehr unhandlich für so etwas wie ein HTTP-Client, insbesondere in C ++. Sie mich nicht falsch, es ist eine große Bibliothek, aber nicht geeignet für ein einfaches hTTP-Client).

C ++ nicht wirklich eine API per se. Um eine GET-Anfrage zu tun, Ihr Programm braucht eine TCP-Socket-Verbindung zum betreffenden Standort zu öffnen und die Informationen auf der Socket sendet mit der HTTP-Spezifikation zu entsprechen, finden Sie unter hier . Es gibt wahrscheinlich eine Reihe von Bibliotheken, die Sie mit diesem helfen, zum Beispiel finden können, Sie an, was das Open-Source-Programm wget verwendet aussehen könnte. Wenn Sie es selbst sind Codierung, wäre es hilfreich sein, ein Packet Sniffing-Tool zu verwenden. Man konnte sehen, genau das, was Ihr Browser an den Web-Server sendet die Datei zurück, zu erhalten und nur genau diese Botschaft senden. Es ist nicht zu hart, aber es ist ziemlich hart. TCP ist eine ziemlich große Lernkurve zunächst.

By the way, was meinst du mit "von Google?"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top