GZIP圧縮されたHTTPコンテンツを取得するためのVBSコード
多くのウェブサイトでは、読み込み速度を向上させるために、HTTPサーバーのGZIP圧縮機能を有効にしています。クライアントから送信されたHTTPリクエストがGZIPエンコードを許容することを宣言すると、サーバーは自動的にHTTPレスポンスのコンテンツをGZIPで圧縮します。しかし、VBSでGZIPエンコードを自動的に解凍するのは、それほど簡単ではありません。
GZIP圧縮は、Msxml2.XMLHTTPを始めとして、コンポーネントによって扱いが異なります。
'By Demon
'http://demon.tw
Dim http
Set http = CreateObject("Msxml2.XMLHTTP")
http.open "GET", "https://www.baidu.com", False
http.setRequestHeader "Accept-Encoding", "gzip"
http.send
WScript.Echo http.responseText
テストの結果、Msxml2.XMLHTTPはGZIPの伸張を自動で行ってくれて、GOOD!
次に、Msxml2.ServerXMLHTTPです。
'By Demon
Dim http
Set http = CreateObject("Msxml2.ServerXMLHTTP")
http.open "GET", "https://www.baidu.com", False
http.setRequestHeader "Accept-Encoding", "gzip"
http.send
WScript.Echo http.responseText
残念ながら、返されたコードは文字化けしています。WinHttp.WinHttpRequest.5.1をもう一度見てみてください。
'By Demon
Dim http
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.open "GET", "https://www.baidu.com", False
http.setRequestHeader "Accept-Encoding", "gzip"
http.send
WScript.Echo http.responseText
やはり文字化けしている。XMLHTTPコンポーネントは一般的な使用には十分すぎるほどですが、Cookieが送れない、Referencesの偽造ができないなど、うまくいかないこともあります。そこで、やはりGZIPをデコードする方法を考えなければならないのですが、VBSでアルゴリズムを書くか、サードパーティのコンポーネントを呼び出すかの2つの方法しかありません。
アルゴリズムは、あまり効率的ではないと思うので、興味のある方はお遊びで書いてみてください。Chilkat.Gzipというサードパーティ製のコンポーネント(サードパーティ製を使うなんて、本当に年なんだなぁ)がいい感じです。
Dim Gzip
Set Gzip = CreateObject("Chilkat.Gzip")
Gzip.UnlockComponent ""
'By Demon
Dim http
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.open "GET", "https://www.baidu.com", False
http.setRequestHeader "Accept-Encoding", "gzip"
http.send
WScript.Echo Gzip.UncompressString(http.responseBody, "utf-8")
ところでこのコンポーネントは30日間の無料お試しで有料なのですが、それでもVBSで実装すべきなのでしょうか?
元記事: http://demon.tw/programming/vbs-http-gzip.html
関連
-
ActiveXコンポーネントはオブジェクトを作成できません: dm.dmsoft code: 800A01AD
-
vbsアプレットアイコン変更方法の実装
-
VBSで指定されたディレクトリにあるファイルの一覧を取得する方法
-
VBS配列関数学習例分析
-
VBSの基本 - vbscript動的配列
-
vbsを使用してYahooのレートを取得する
-
vbsでリモートホストのファイルを取得し、指定されたディレクトリに保存する。
-
ScriptControl コンポーネントのプロパティ、メソッド、イベント紹介
-
VBSのInStrRev関数の第3パラメータ(Start)の使用に関する注意点
-
iisext.vbsを使用してアプリケーションの依存関係を追加する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vbsフッターエラーの実行、中国語の雑な解決(エンコーディングの問題)
-
VBSを使用してHostsファイルのワンクリック設定コードを実装する
-
ExcelワークシートのVBSトラバーサルのコード
-
ファイルをドラッグ&ドロップするとファイルパスが表示される vbs コード
-
vbs 文字列取得 (文字列の取り込み)
-
VBSの基本 - vbscriptキュー
-
VBScriptは、IEウィンドウのタイトルに応じてESCを出力する
-
指定されたプロセス名の小さなVBSを終了させる
-
CPU使用率を取得するVBScriptメソッド
-
ファイルの作成時刻、最終修正時刻、最終アクセス時刻を取得する vbscript メソッド