構文
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レスポンスヘッダを格納したメモリを指すポインタを返します。
ppContentとppHeaderが返すメモリは、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