HTTPリクエストを送信し、HTTPレスポンスを受信します。

構文

bool HTTP_GetResponse(
  HTTP_REQUEST_HANDLE handle,
  char *phase,
  unsigned int *pHttpResponse,
  char **ppContent,
  unsigned int *pContentLength,
  char **ppHeader,
  unsigned int *pHeaderLength
);

パラメータ

handle
[in] HTTP_CreateRequest関数で取得したHTTPリクエストハンドルを指定します。
phase
[out] 現在のフェーズを返します。次の値のいずれかを返します。
説明
HTTP_REQUEST_INIT HTTPサーバにまだ接続していない状態。
HTTP_REQUEST_CONNECTED HTTPサーバとの接続に成功し、HTTPリクエストと送信データを送信中。
HTTP_REQUEST_UPLOAD_COMPLETE 送信データがある場合、送信データの送信が終了した。
HTTP_REQUEST_FINISHED HTTPサーバからのHTTPレスポンスの受信が完了した。
HTTP_REQUEST_CONNECTION_ERROR HTTPサーバとの接続に失敗した。
HTTP_REQUEST_TIMEOUT 応答待ちでタイムアウトが発生した。
HTTP_REQUEST_SYSTEM_ERROR システムの異常が検出された。
pHttpResponse
[out] HTTPレスポンスのステータスコードを返します。
ppContent
[out] 受信データを格納したメモリを指すポインタを返します。
pContentLength
[out] 受信データのバイト数を返します。
ppHeader
[out] HTTPレスポンスヘッダを格納したメモリを指すポインタを返します。
pHeaderLength
[out] HTTPレスポンスヘッダのバイト数を返します。

戻り値

 関数が成功したらtrueを、それ以外ならばfalseを返します。

解説

 HTTP_CreateRequest関数で取得したHTTPリクエストハンドルを指定して本関数を呼び出すと、指定されたHTTPリクエストを送信し、HTTPレスポンスを受信します。

 phaseに返されるフェーズの値を監視しながら、HTTPレスポンスが受信されるまで本関数を呼び続けます。

 phaseが HTTP_REQUEST_INIT、HTTP_REQUEST_CONNECTED または HTTP_REQUEST_UPLOAD_COMPLETE のときは、処理が現在進行中であることを表します。
 この場合は、監視を継続します。

 phaseが HTTP_REQUEST_CONNECTION_ERROR、HTTP_REQUEST_TIMEOUT また HTTP_REQUEST_SYSTEM_ERROR の場合は、HTTPリクエストの送信またはHTTPレスポンスの受信が失敗したことを表します。
 この場合は、本関数による応答の監視を中止し、処理を終了してください。

 phaseが HTTP_REQUEST_FINISHED のときは、HTTPレスポンスの受信が完了したことを表します。
 この場合は、pHttpResponseでサーバが返したステータスコードを確認してください。ppContentには受信データを格納したメモリ指すポインタを、ppHeaderにはHTTPレスポンスヘッダを格納したメモリを指すポインタを返します。

 ppContentppHeaderが返すメモリは、HTTP_CloseRequest関数を呼び出すと解放されます。それらのメモリを読む場合は、HTTP_CloseRequest関数を呼び出す前に行ってください。

必要条件

ヘッダファイル:
lib.h
http_request.h
ライブラリファイル:
libHttpRequest.a
libSTARTUPOPH5000.a

サンプル

    int  result_code;
    char responsePhase;
    unsigned int responseStatus;
    char *content;
    unsigned int content_length;
    char *header;
    unsigned int headerLength;
    bool bExit = false;

    ...

    while (1)
    {
        //Wait for HTTP response
        if (!HTTP_GetResponse(
                hRequest, 
                &responsePhase, 
                &responseStatus, 
                &content, 
                &content_length, 
                &header,
                &headerLength))
        {
            result_code = xxxx_SYSTEM_ERROR;
            break;
        }
        switch(responsePhase)
        {
            case HTTP_REQUEST_CONNECTION_ERROR:
            case HTTP_REQUEST_SYSTEM_ERROR:
            case HTTP_REQUEST_TIMEOUT:
                result_code = xxxx_SERVER_CONNECTION_ERROR;
                bExit = true;
                break;

            case HTTP_REQUEST_FINISHED:
                if (responseStatus != 200)
                {
                    bExit = true;
                    result_code = xxxx_SERVER_RESPONSE_ERROR;
                    break;

                }
                // Got response....

                ....

                result_code = xxxx_SUCCESS;
                bExit = true;
                break;
        }
        if (bExit)
            break;
          
        Idle();
    }

最終更新日:2020/10/28