C ++の「GET」リクエスト、またはC ++で動作するファイルをどのようにダウンロードしますか?

StackOverflow https://stackoverflow.com/questions/419344

質問

申し分なく、これを試して3日間を過ごしました。シナリオは次のとおりです。

Googleから「.csv」ファイルをダウンロードし、そのファイルのデータを処理したい。 Win32コンソールアプリケーション用です。私は後者をダウンしていますが、私は一生ファイルをダウンロードする方法を見つけることができません。 libcurl、curlpp、ptypes、.NET apiを使用して自分でロールバックすることを聞いたことがあり、何度も言われました:

  

...これは単なるGETリクエストです

それはすべて順調ですが、私は何かを逃したに違いありません。誰もがこれを行う方法を知っているだけで生まれたようだからです。私はこれを理解するために本を調べており、「The Art of C ++」で道を進んだ後、LNKerrorsで大きな問題さえ抱えていました。しばらくの間。

言われたことはすべて、私はこれから多くを学びましたが、この時点でそれを行う方法を知りたいだけです。 C ++のAPIは非常に不足しており、サンプルコードは見つかりません。オンラインのチュートリアルはほとんど存在しません。そして、これが重要だと思う本はありません。

誰かが私に救命いかだを投げてもらえますか?私はここの端にいる男です。

編集

" from Google"つまり、ホストしている.csvファイルをダウンロードしたいということです。例はここにあります。

役に立ちましたか?

解決

これをあなたの意志で曲げることができるはずです。

今、あなたの質問に少し答えました。なぜC ++なのか?言語に反することはありませんが、仕事に最適な言語を選択してください。 Perl、PHP、およびPython(およびそれ以上)はすべて、この種の操作に関する優れたドキュメントとサポートを備えています。

perl(私がよく知っているもの)では、わずか3〜5行のコードです。

他のヒント

既にあるものだけを使用しないのはなぜですか?

UrlDownloadToFile()

Win32プラットフォームを使用しているため、GETリクエストを比較的簡単な方法で実装するために使用できる組み込みライブラリがあります。WinInetはWin32 SDKの一部です。 WinInetの基本リファレンスは、MSDNで見つけることができます。

Win32 APIに精通していない場合は、いくつかの大まかなそりが先に来ることに注意してください。サンプルコードのかなり有用なブロックがありますこちら

適切なライブラリ参照をプロジェクトに追加しないと、リンカーエラーが発生します。既にいくつかの教訓を学んでいるように聞こえますので、簡単に説明しますが、Win32のドキュメントで必要なライブラリとヘッダーファイルの両方への参照が見つかることを確認してください(どこで学ぶ必要があります)検索するページ)。

標準ライブラリではできません。 win32なので、Paul Keisterのアドバイスに従うことができます。

しかし、 libcurl をご覧ください。C++を使用しているため、お勧めします POCO も非常に便利です。とても便利なツールです!

別のオプションは WinHTTP です。 Windowsにも付属しています。

>サンプルコードが見つかりません

???

15年にわたって数十のサンプルが投稿されています。 api ng news://comp.os.ms-windows.programmer.win32を参照してください (Cのサンプル)

(COM、INETなど)

私もC ++用の優れたhttpライブラリを探していましたが、「完璧な」ライブラリは見つかりませんでした。 Boost.Asio は素晴らしいですが、単純なhttpライブラリ( httpクライアントの例は良いスタートです)。 C ++ネットワークライブラリ* (cpp-netlib)は順調に進んでおり、より高いasioの最上位APIですが、あまり成熟していません。 http_clientの例

より良いオプションが見つからない限り、asioの周りに独自のラッパーを作成するか、cpp-netlibに拡張(および貢献)します。

(BTW libcurlは私にとってより良いオプションではありません。それは私が望んでいるよりもはるかに大きなapiであり、特にC ++では、httpクライアントのようなものには非常に扱いにくいです。誤解しないでください。すばらしいライブラリですが、単純なhttpクライアントには適していません。)

C ++にはAPI自体はありません。 GETリクエストを行うには、プログラムで問題のサイトへのTCPソケット接続を開き、ソケットに情報を送信してHTTP仕様に準拠する必要があります。こちら。これを支援するために見つけることができる多くのライブラリが存在する可能性があります。たとえば、オープンソースプログラムwgetが使用するものを調べることができます。自分でコーディングする場合は、パケットスニッフィングツールを使用すると便利です。ブラウザーがWebサーバーに送信する内容を正確に確認してファイルを取得し、そのメッセージを送信するだけです。それほど難しくありませんが、かなり難しいです。 TCPは最初は非常に大きな学習曲線です。

ところで、「グーグルから」とはどういう意味ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top