8月11日(金曜日)の夜にオフ会を開催したいとおもいます。
ぜひぜひご参加くださいませ。
話題は・・・よくわかりませんがマターリおしゃべりです。
詳しくはページ上のリンクの先をご覧くださいませ。
みなさんにお会いできるのを楽しみにしております。
今回は平日金曜とかなんで、はやめに人数決めたいでございます。。
有人で月とはまた夢のある。
いや、久々にいいニュースみた。
まぁ、色々政治的都合とかもあって大胆めなロードマップなんだろうけど。
まずはお金をガシガシつかって失敗しまくらないとどうしようもないですし。
先日全日空(ANA)のサイトから予約検索のプログラムを作ったときの話題。
全日空の運行便検索サイトはSSLなのですよね。
日本航空の予約サイトは暗号化なしなので楽なのですが。
そういえばIPNuts(ソフトウエアルータ)導入したときもEtherNetのMTUサイズの問題でANAのサイトだけ表示できない不具合が起きたのを思い出します。関係ないけど。
HTTPのプロトコルは単純なのでSSLでなければ自分で実装しても良いのですが、SSLとなるとちょっと面倒なのでWinInetを利用してみました。
WinInetの基本的な使い方な簡単ですが、どうも高級すぎて使いづらい。。
サンプルが見つかりそうでなかなか無かった(たぶんよく探せばあると思いますが)ので作ってみました。忘れないようにメモっときます。
といっても普通にHTTPファイルを取得するのとほとんど同じで要点だけ書くと、
・ポート番号を80(INTERNET_DEFAULT_HTTP_PORT)ではなく443(INTERNET_DEFAULT_HTTPS_PORT)にする。
・InternetConnectで、INTERNET_SERVICE_HTTPを指定する。
・HttpOpenRequestで、INTERNET_FLAG_SECUREを指定する。
・【重要】フォームデータを送信したいので、HttpAddRequestHeadersを使って「Content-Type: application/x-www-form-urlencoded」を追加。
・HttpSendRequestExでリクエストを開き、InternetWriteFileでx-www-form-urlencodedしたフォームデータを書き込み、HttpSendRequestEx(HttpEndRequest)でリクエストを送信。
・InternetReadFileで受信したデータを取得
きちんと証明書が有効なサイトならこれでOKです。
デバッグ用に自己署名SSLなどを使うとエラーになります。
その場合はInternetQueryOptionでINTERNET_OPTION_SECURITY_FLAGSを読み取りセキュリティフラグを変更します。
具体的には「SECURITY_FLAG_IGNORE_UNKNOWN_CA」、「SECURITY_FLAG_IGNORE_CERT_CN_INVALID」、「SECURITY_FLAG_IGNORE_CERT_DATE_INVALID」を付加してInternetSetOptionします。
また、HTTPからHTTPSへリダイレクトされるのを許可するには「SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS」フラグを付けます。
サンプルコード:
wwwget_cpp(HTML)
wwwget.cpp(CPP)