トレーニング
モジュール
Dynamics 365 Business Central 内からの REST サービスへのアクセス - Training
Dynamics 365 Business Central での HTTP データ型の使用方法、外部 REST サービスへの接続方法、および JSON データの処理方法について説明します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
このチュートリアルでは、HTTP 要求からヘッダー情報を取得する方法について説明します。
ヘッダー情報を取得するには、次の 2 つの方法があります。
アプリケーションで必要な HTTP ヘッダーに関連付けられている定数の使用は、内部的には高速ですが、定数が関連付けられていない HTTP ヘッダーが存在する可能性があります。 このような場合は、HTTP_QUERY_CUSTOM属性フラグを使用するメソッドを使用できます。
どちらのメソッドも HttpQueryInfo 関数を使用します。 HttpQueryInfo は、HTTP 要求が行われた HINTERNET ハンドル、1 つの属性、バッファー、バッファー サイズを含む DWORD 値、およびインデックス値を受け取ります。 HttpQueryInfo に渡される属性に修飾子を追加して、データを返す形式を示すこともできます。
HttpQueryInfo 関数を使用して定数を使用して HTTP ヘッダーを取得するには、次の手順に従います。
次の例では、HTTP_QUERY_RAW_HEADERS_CRLF定数を使用した HttpQueryInfo の呼び出しを示します。これは、返されるすべての HTTP ヘッダーを要求する特別な値です。
// Retrieving Headers Using a Constant
BOOL SampleCodeOne(HINTERNET hHttp)
{
LPVOID lpOutBuffer=NULL;
DWORD dwSize = 0;
retry:
// This call will fail on the first pass, because
// no buffer is allocated.
if(!HttpQueryInfo(hHttp,HTTP_QUERY_RAW_HEADERS_CRLF,
(LPVOID)lpOutBuffer,&dwSize,NULL))
{
if (GetLastError()==ERROR_HTTP_HEADER_NOT_FOUND)
{
// Code to handle the case where the header isn't available.
return TRUE;
}
else
{
// Check for an insufficient buffer.
if (GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
// Allocate the necessary buffer.
lpOutBuffer = new char[dwSize];
// Retry the call.
goto retry;
}
else
{
// Error handling code.
if (lpOutBuffer)
{
delete [] lpOutBuffer;
}
return FALSE;
}
}
}
if (lpOutBuffer)
{
delete [] lpOutBuffer;
}
return TRUE;
}
httpQueryInfo 関数を使用して、HTTP_QUERY_CUSTOMを使用して HTTP ヘッダーを取得するには、次の手順に従います。
次の例では、HTTP_QUERY_CUSTOM定数を使用して Content-Type HTTP ヘッダーを要求する HttpQueryInfo の呼び出しを示します。
// Retrieving Headers Using HTTP_QUERY_CUSTOM
BOOL SampleCodeTwo(HINTERNET hHttp)
{
DWORD dwSize = 20;
LPVOID lpOutBuffer = new char[dwSize];
StringCchPrintfA((LPSTR)lpOutBuffer,dwSize,"Content-Type");
retry:
if(!HttpQueryInfo(hHttp,HTTP_QUERY_CUSTOM,
(LPVOID)lpOutBuffer,&dwSize,NULL))
{
if (GetLastError()==ERROR_HTTP_HEADER_NOT_FOUND)
{
// Code to handle the case where the header isn't available.
delete [] lpOutBuffer;
return TRUE;
}
else
{
// Check for an insufficient buffer.
if (GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
// Allocate the necessary buffer.
delete [] lpOutBuffer;
lpOutBuffer = new char[dwSize];
// Rewrite the header name in the buffer.
StringCchPrintfA((LPSTR)lpOutBuffer,
dwSize,"Content-Type");
// Retry the call.
goto retry;
}
else
{
// Error handling code.
delete [] lpOutBuffer;
return FALSE;
}
}
}
return TRUE;
}
注意
WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスの場合は、 Microsoft Windows HTTP サービス (WinHTTP) を使用します。
トレーニング
モジュール
Dynamics 365 Business Central 内からの REST サービスへのアクセス - Training
Dynamics 365 Business Central での HTTP データ型の使用方法、外部 REST サービスへの接続方法、および JSON データの処理方法について説明します。
ドキュメント
HttpQueryInfoA 関数 (wininet.h) - Win32 apps
HTTP 要求に関連付けられているヘッダー情報を取得します。 (ANSI)
WWW 上のリソースには http を使用してアクセスします。
HttpSendRequestExA 関数 (wininet.h) - Win32 apps
指定した要求を HTTP サーバーに送信します。 (HttpSendRequestExA)