2

Marmalade SDK を使用してモバイル開発をいじろうとしています。現在、IwHTTP を使用してさまざまなタスクを実行しようとしています。http://www.google.com URLで特定の問題を再現できました。私のコードは、標準の Google ページではなく「302 エラー」ページのソース コードを出力します。これは私固有の問題ではありません (つまり、私は Google をあまり気にしませんでした) が、これは別の Web サイトで私の問題を再現します。

この問題について Web を調べてみましたが、マルウェアに関連する問題しか見つかりませんでした。これはライブラリの使用の問題ではないと思います。これはおそらく、ここで私を悩ませている HTTP の理解不足です。このエラーを生成する短いスニペットを次に示します。

#include "s3e.h"
#include "IwGx.h"
#include "IwHTTP.h"
#include <string>

int32 rec = 0;
CIwHTTP http;
std::string output = "";
char buffer[1024];

int32 min(int32 a, int32 b) { return a > b ? b : a; }

int32 http_get_callback(void* sys_data, void* user_data) {
    if(http.ContentReceived() < http.ContentLength()) {
        http.ReadData(buffer, min(1024, http.ContentLength() - http.ContentReceived()));
        output += buffer;
    }
}

int main()
{
    IwGxInit();

    IwGxSetColClear(0, 0, 0xff, 0xff);

    http.Get("https://www.google.com", http_get_callback, 0);

    while(!s3eDeviceCheckQuitRequest() && 
            !s3eKeyboardGetState(s3eKeyEsc) & S3E_KEY_STATE_DOWN &&
            !s3eKeyboardGetState(s3eKeyAbsBSK) & S3E_KEY_STATE_DOWN)
    {
        IwGxClear();
        IwGxPrintString(5, 5, output.c_str());
        IwGxFlush();
        IwGxSwapBuffers();
        s3eDeviceYield(0);
    }
    IwGxTerminate();
    return 0;
}

バリアント (SSL の有無にかかわらず、.com と .ca を使用) も試しましたが、期待どおりの出力を得ることができませんでした。

この問題に関するポインタはありますか?

編集: そして、このコードがおそらく恐ろしいものであることは知っています。これは、SDK を学習するための単なるテスト コードです。

4

1 に答える 1

4

HTTP コード 302 は、一時的なリダイレクトを意味します。ブラウザの場合、リダイレクトに従う必要があることを意味します。リダイレクト先は、HTTP 応答ヘッダーのLocation:.

このリダイレクトを使用する場合は、このヘッダーを取得してフォローする必要があります。

于 2013-05-09T02:52:18.687 に答える