WinInet 系の API で Basic 認証ってどうやるんだろう、というかそもそも Basic 認証のやり方自体知らないのでそれも含めて教えて Google! なんてやっていたら Code Project のページが見つかった。
なんだか便利そうな WinInet 系 API のラッパクラスが。自分であれこれやるより、便利で確実っぽいので、自作のクラスをあっさり捨ててこちらの CHttpClient クラスに差し替えることにしました。車輪の再発明なんて時間の無駄だよね!
でもって、続けて検索したヒットしたサイトを参考に、次のような形でリクエストを送ってみたところあっさり認証できました。
#include "LyoulHttpClient.h" // CodeProjectから拾ってきたソース using namespace Lyoul; // ↑のクラスを包んでる名前空間 void func() { CHttpClient hClient; hClient.SetInternet("Userange no Name"); // UserAgentの名前をセットする hClient.AddHeader("Authorization", "Basic ----"); // リクエストヘッダを追加する CHttpResponse* response = hClient.RequestPost(uri/*どこか(何処)のアドレス*/); // response を使ってなんか処理する delete response; // これめんどくさい }
「----」の部分に、「ユーザ名:パスワード」な文字列を Base64 という形式でエンコードして突っ込んで、 RequestPost で送ってやるだけ。レスポンスとして、ちゃんとしたものが帰ってきました。
RequestPost メソッドの戻り値が CHttpResponse という、サーバからのレスポンスを保持するクラスのポインタなのですが、これがヒープに確保されているために呼び出し側で解放しなければならない点がちょっと気になりますが、それ以外は結構使いやすいです。ポインタはスマートポインタにでも突っ込んでおけば良いでしょう。