2014年7月31日木曜日

WinInetでWebサービスにPOSTする

前回書いたように、C/C++でWebサービスにPOSTするモジュールを作り直すことに。

作った人間がもういなくなったので/誰も直してくれないので、自分で直すしかない。

該当ソースを見ると、WinInetを使って、IntenetOpen()した後、InternetOpenUrl()している。確かにこれだとGETになってしまうはず。

調べてみると、いくつか該当記事が見つかりました。
Windows API, WinInetによるPOST
Is there any good example of http upload using WinInet c++ library
HTTP/HTTPSでPOST(wininet.dll)

 基本的には同じで、
InternetOpen()
InternetConnect()
HttpOpenRequest()
HttpSendRequest()

の順に処理をする。POSTだけでなく、GETとか他のメソッドにも使えるらしいので、基本的にはこれで共通関数にすれば使い回しできるかと。

上記の例では、全て、TCHARで文字を処理しているのだけれど、自分の扱っているものでは、全てchar型で処理してもOKでした。これは、HttpSendRequest()=HttpSendRequestA()になっているあたりとも関係していると思いますが、厳密には追いきれていない。
また、 HttpSendRequest()の際、lpOptional部分はBASE64でエンコードしないと、文字化けするので注意。

0 件のコメント:

コメントを投稿