WinHTTPの使用法の備忘録


WinHTTPのPOSTデータ送信について、中でもファイルのアップロードを含むmultipart(マルチパート)でのPOSTデータ送信での注意事項。

VBA(VBでも同様の事態が考えられるかも・・・)で使用する際の注意。

POSTデータとして与えるデータはString型の変数に入れてはいけない!!

POSTするデータの内容にも依るのだが、String型に入れて受け渡すと、データが送信されずContent-Lengthがなんと「0」になってしまう。

リテラルで入れればOKなのだが、そんな事になったらスクレイピングなんぞままならない。

これでは何の役にも立たない訳で~


解決方法は…

StrConv("POSTDATA",vbFromUnicode)

ではダメで~

Variant型の変数に入れる!

StrConv("POSTDATA",vbFromUnicode)

では、文字が化けまくりでマトモなデータ送信になりません。

どうしてかは知りませんが、何故かダメなんです!!


ホント、たったこんな事だけで解決出来るのだけど、偶然気付いただけで、気付かないとどうにもならない。


Function FuncWinHTTPRequest(ReqAddress As String, strMethod As String, strPostData As String) As String
Dim vtPostData As Variant
Dim webReq As Object
Set webReq = CreateObject("winHTTP.WinHttpRequest.5.1")

webReq.Open strMethod, ReqAddress, False 'Falseは同期通信
webReq.SetRequestHeader "Content-Type", ""multipart/form-data; boundary=--BOUNDARY"

vtPostData = strPostData 'Variant型に代入
webReq.Send vtPostData 'String型からWinHTTPを呼び出し不可!!

'HTMLの文字コードがUTF-8なら変換不要。

'通常はstrConv(webReq.ResponseBody,vbFromUnicode,xxxx)はこんな感じ xxxxは、文字コードの番号
FuncWinHTTPRequest = webReq.ResponseBody

End Function


こんな感じで解決!!


XP Sp3

Excel2007VBA にて


私見・・・

海賊版と知っていてダウンロードしたら違法となった・・・

でもこれって、知っていてってどう証明するのだろう・・・

微妙な表現のモノをダウンロードしてきたら海賊版だった場合、どう証明するのだろう。

ホームページなんてすぐ変わる場合もあるし、たまたまそのページの作成者が微妙な表現にしてアップロードを試した瞬間でのダウンロードだったら、次に訪れた時には明らかに海賊版とわかる表現になっていたら・・・運用が分からないからなんとも言えないけど、基準が示されていない以上、悪法としか思えないなぁ。


ただ、まずその前に、これって違法着うたを規制したいってのが一番の目的なんだろうけど。

そもそも違法着うたって、おかしくない?

CD買っても、借りても、要はちゃんと著作権料払っても自分の好きなタイミング(この場合、電話がかかってきたタイミングね)で聴く事ができない仕様にされている訳で。

そもそもCD音源等から、自由に着うたを作成できれば、いちいちホームページに上げるヤツなんて(ほとんど)出なかった訳で・・・

そういう奇特なヤツがいても、CDから作成したデータ(もしくは提供された着うた用データ)をPCから携帯に転送できたら、最初から利用するヤツなんてしれていた訳で・・・

要は、利権者が単に著作権料二重に搾取したいだけじゃん!!!

ダウンドーロ違法化始めるなら、CDを買ったり借りたりした場合、着うた用データも含んでいて(もしくはダウンロード権利が付いていて)着うたにできるようにしなきゃイケないでしょ。


だいいち着うた自作できないのは日本だけの仕様な訳だし・・・

(その証拠にiphone等は時間など条件が限定されてはいるものの自作可能です。)

ホント都合の良い利権団体の勝手な言い分ばかりまかり通っているなぁと思う・・・


まあ映画とか、アップロードはしちゃあかんわな。著作権違反は褒められた事じゃないし薦めてる訳じゃありませんので・・・