0

アプリケーションに必要なファイルをインターネットから(インストールの一部として)ダウンロードしようとしています。これにより、アプリを初めて起動したときに、必要なファイルがダウンロードされます。今のところ、それらをGoogleドライブに配置して公開してから、libcURLを使用してダウンロードします。問題は、データを取得できないことです。

私は次のリンクを使用します:そしてidhttps://docs.google.com/uc?id=documentID&export=downloadに置き換えます。documentIDただし、サイトに接続しようとすると、基本的に「一時的に移動」と表示され、新しいURLへのリンクが表示されるHTMLコードの小さなスニペットが表示され続けます。プログラムで新しいリンクを使用すると、出力がまったく得られません。ただし、サインインしていなくても、両方のリンクはWebブラウザーで正常に機能します。それでは、プログラムで両方のリンクが機能しないのはなぜですか。SSLオプションを正しく設定していませんか、それともGoogleドライブはこの種の目的ではありませんか?

これが私のコードです:

#include <curl/curl.h>

int main()
{
    curl_global_init(CURL_GLOBAL_ALL);

    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://docs.google.com/uc?id=documentID&export=download");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        res = curl_easy_perform(curl);
    }
    curl_easy_cleanup(curl);
    return 0;
}

どんな助けでもいただければ幸いです。

4

2 に答える 2

2

CURLOPT_FOLLOWLOCATIONリダイレクトに従うようにcURLに指示するオプションを設定する必要があります。

于 2012-07-25T17:51:59.327 に答える
1

これが直接役立つかどうかはわかりませんが、私はいつも電話をかけています

curl_global_init(CURL_GLOBAL_ALL);

私はあなたが使用しないと思います。この呼び出しは、スレッド化されたSSLコードの例http://curl.haxx.se/libcurl/c/threaded-ssl.htmlで見られました。この`curl_global_init()呼び出しは、とりわけSSL初期化を実行します。これについては、このリンクhttp://curl.haxx.se/libcurlと、ここのlibcurlチュートリアルhttp://curl.haxx.se/libcurl/c/libcurl-tutorial.htmlで説明されています。

于 2012-07-25T17:57:18.303 に答える