数年前に起きたトラブルである。
以前は、プログラム名に日本語は使わなかったが、もう日本語を使ってもいいだろうと思い、プログラム名に日本語を使った。
実行 PC の OS が Windows 7 の場合、問題が無かったが、OS が Windows 10 にアップデイトされたところ、サーバとの通信に時々問題が起きるようになった。
時々、HTTP ステータス 503 (Service Unavailable) が返るようになった。
調べた結果、HTTP ヘッダの User-Agent: に日本語のプログラム名が自動で設定され、それが原因だとわかった。
この場合も、サーバによって動作は異なる。また、今回のサーバも問題が無い時と問題が起きる場合があった。
Visual Studio 2005, 2010, 2013 で、この問題が起きることを確認した。
MFC の HTTP 通信では、CHttpConnection や CHttpFile を使う。
次のように、HTTP ヘッダの User-Agent: に、ASCII のプログラム名を設定することで、トラブルは解決した。
CHttpFile* pFile = (省略) TCHAR headers[512]; _stprintf_s(headers, 512, _T("Accept: text/*\r\nUser-Agent: %s \r\nContent-Type: text/plain; charset=Shift_JIS\r\n"), _T("ASCII Program Name")); pFile->AddRequestHeaders(headers);