簡易HTTPクライアント作成支援モジュール

  ehttp_mod.as
ver 0.02b (2002/07/03)

...

戻る

このスクリプトは?

  • このスクリプトはおにたまさん作のhspsock.dll(v1.2)を使って、HSPでHTTPクライアント作成を支援するモジュールです
  • URLを指定するだけでファイルを取得し、漢字コード変換及び改行コード変換をサポートします。
  • プロクシを使ったファイルの取得ができます。
  • このスクリプトはフリーで無保証です。使用・改造・添付など御自由にお使いいただけますが、 トラブルには対応できないので各自の責任の下で行なって下さい。

▲top

動作環境

▲top

ダウンロード

ehttp_mod.as v0.02b (2002/07/03)
LZH圧縮ファイル(20KB)
http://homepage1.nifty.com/dateshim/soft/ehttp_mod002b.lzh

Download

 

▲top

ファイル構成

ehttp_mod.as モジュールスクリプト
sample.as サンプルスクリプト
sample1.as サンプルスクリプト
index.html このドキュメント
ehttp_mod.hs HSP Help Tools ヘルプソース

▲top

インストール

インストーラーは付属していないので手動でインストールしてください。アーカイブに含まれているファイル全てを展開し、ehttp_mod.as をHSPのcommonフォルダにコピーして下さい。
また、当モジュールはおにたまさん作のhspsock.dll が必要です。hspsock.dll (ver1.2)はHSP ver2.55のフルセットに標準で付属しています。もし、インストールされていなければHSPホームページにある「機能拡張ソフト紹介」のページからダウンロードしてインストールしてください。当モジュールを使用したスクリプトを実行させるためには、hspsock.dll HSPのフォルダに、hspsock.asがスクリプトと同じフォルダかHSPのcommonフォルダに存在している必要があります。

▲top

アンインストール

モジュールスクリプトを削除してください。レジストリは使用しないのでご安心を。(^^;)

▲top

使用方法(命令リファレンス)

スクリプトの先頭に

#include "ehttp_mod.as"

という行を追加 することによって、以下の命令が使えるようになります。

コード変換命令[ehttp_kanjicode,ehttp_jis2sjis,ehttp_euc2jis,ehttp_crlfconv]のモジュール名は ehttp_jcode です。
そのほかの命令のモジュール名は ehttp です。

命令およびその機能
 【設定命令】
ehttp_setproxy PROXYサーバを設定
ehttp_seturl URL設定&エンコード命令
ehttp_setjpcode 日本語コード変換設定命令
 【リクエスト命令】
ehttp_get ネットからファイルを取得する
ehttp_getting ネットからファイルを取得する(複数回実行型)
ehttp_cancel アクセスのキャンセル命令
 【結果参照命令】
ehttp_refbodysize オブジェクトボディ読み込み済みサイズ 参照命令
ehttp_refbodyper オブジェクトボディ読み込み済み% 参照命令
ehttp_refstatus HTTPステータスコード 参照命令
ehttp_reflastmod リモートファイルの最終更新時間 参照命令
ehttp_refgetphase ehttp_getting実行状態 参照命令
 【コード変換命令】
ehttp_kanjicode 漢字コード推定命令
ehttp_jis2sjis JIS->SJIS漢字コード変換命令
ehttp_euc2sjis EUC->SJIS漢字コード変換命令
ehttp_crlfconv CR,LF->CRLF 改行コード変換命令
Commands

設定命令  
ehttp_setproxy - PROXYサーバを設定
ehttp_setproxy proxy,port

proxy  プロクシサーバの名前 (例:proxy.foo.com)
port  プロクシサーバのポート (例:8080)

[解説]

ファイルのリクエストに使うHTTPプロクシサーバの設定をします。一度設定すると 、以後ehttp_setproxy命令を再度実行するまで有効となります。
プロクシサーバ名に空文字列を指定すると以後、プロクシを使用しません。
なお、プロクシによる認証やSOCKSはサポートしていません。

[サンプル]

  ehttp_setproxy "proxy.foo.com",8080 ;proxy.foo.comの8080番ポートをプロクシに設定
  ehttp_setproxy "" ;プロクシを無効にする
ehttp_setproxy

ehttp_seturl - URL設定&エンコード命令
ehttp_seturl url,sock_id

url    ターゲットにするファイルのURL
sock_id  使用するソケットID(省略:ID 0 を使用)

[解説]

ehttp_get命令やehttp_getting命令で取得するファイルのURLを設定します。 また、使用するHSPSOCKのソケットIDを同時に指定します。
ターゲットにするファイルのURLはhttp://からフルパスで入力してください。 漢字等を含むURLは自動的にエンコードされます。
ehttp_get命令やehttp_getting命令によってファイルが取得途中の場合は ehttp_seturl命令によるURLの変更はできません。
成功するとstatに0を返し、失敗するとstatに以下の値を返します。

内容
2 ehttp_get命令やehttp_getting命令が処理を終えてない
3 URLがhttp://から始まっていない
4 エンコードしたURLの長さが1024バイトを超えている

[サンプル]

  url="http://www.mynet.ne.jp/~simodate/" ;ターゲットにするURL
  ehttp_seturl url ;URLの設定
ehttp_seturl

ehttp_setjpcode - 日本語コード変換設定命令
ehttp_setjpcode mode
mode    日本語コード変換モード(省略: 0 −自動変換)


[解説]

ネットワークからファイルを取得した後、テキストデータだった場合に行なうファイルの変換方式を指定します。
変換方式はmodeによって以下のように変更されます。

modeの値 内容
0 漢字コードを自動判別しSJISに変換する。改行も変換する。
1 漢字コードをJISとみなしSJISに変換する。改行も変換する。
2 漢字コードをSJISとみなし漢字コードの変換をしない。改行は変換する。
3 漢字コードをEUCとみなしSJISに変換する。改行も変換する。
4 漢字コードの変換および、改行コードの変換を行なわない。

[サンプル]

  ehttp_setjpcode 0  ;漢字・改行コードを自動変換
ehttp_setjpcode

リクエスト命令  
ehttp_get - ネットからファイルを取得する
ehttp_get buffer

buffer  取得した内容を保存するバッファ

[解説]

ehttp_seturl命令で指定したファイルを取得しbufferで指定されるバッファに格納します。 その際に、テキストデータ(text/html,text/plane)であれば、漢字コードと改行の変換を行ないます。
bufferには予め、十分な領域が確保されている必要が有ります。 また、ファイルの取得中はその経過(ehttp_gettingの戻り値)が、タイトルバーに表示されます。
成功するとstatに0を返し、失敗するとstatに2を返し、その詳細がrefstrに代入されます。

[サンプル]

  sdim buf,64000 ;バッファを確保する
  url="http://www.mynet.ne.jp/~simodate/" ;ターゲットにするURL
  ehttp_seturl url ;URLの設定
  ehttp_get buf ;ファイルを取得
ehttp_get

ehttp_getting - ネットからファイルを取得する(複数回実行型)
ehttp_getting buffer

buffer  取得した内容を保存するバッファ

[解説]

ehttp_seturl命令で指定したファイルを取得しbufferで指定されるバッファに格納します。 その際に、テキストデータ(text/html,text/plane)であれば、漢字コードと改行の変換を行ないます。
ehttp_get命令と異なる部分は、ファイル取得のプロセスを数段階に分けているために、複数回の呼出しを 必要とする事です。そのために、ehttp_gettingを使う場合にはウェイトを含むループを形成する必要があります。
sockcheck命令等を用いて短い時間で戻ってくるので、最初にconnectする時以外はそれほどタスクを占有しません。 また、ehttp_refbodysize命令等を用いると途中経過の表示も可能です。
bufferには予め、十分な領域が確保されている必要が有ります。 実行するとstatに以下の値を返します。

内容
0 ファイル取得は完了
1 ファイル取得は継続中
(再度ehttp_getting命令を実行する必要あり)
2 エラーが発生した

また、refstrには命令実行後の状況やエラーコードなどが含まれています。refstrに返される内容は:(コロン)で複数の パートに区切られており、パート毎に以下のような内容を持っています。

エラーの有無:処理フェーズ:実行したhspsockの命令:進歩状況又はエラーコード

[サンプル]

  sdim buf,64000 ;バッファを確保する
  url="http://www.mynet.ne.jp/~simodate/" ;ターゲットにするURL
  ehttp_seturl url ;URLの設定
*@ ehttp_getting buf ;ファイルを取得
  await 1 ;ウェイトを入れる
  if stat=1 : goto *@b ;ファイル取得を続ける
ehttp_getting

ehttp_cancel - アクセスのキャンセル命令
ehttp_cancel

[解説]

ehttp_get命令やehttp_getting命令によるファイル取得を中止します。
ehttp_gettingによってファイルが読み込み途中の場合でも、中間情報がリセットされるので 読み込みを再開する場合は、またデータの最初からになります。

[サンプル]

  ehttp_cancel  ;キャンセルする
ehttp_cancel

結果参照命令  
ehttp_refbodysize - オブジェクトボディ読み込み済みサイズ 参照命令
ehttp_refbodysize size

size  読み込み済みのサイズを保存する数値型変数

[解説]

ehttp_get命令やehttp_getting命令によって読み込まれたファイルのサイズを変数sizeに格納します。
ehttp_getting命令が継続中であれば、これまでに読み込まれたバイト数をsizeに返します。

[サンプル]

  sdim buf,64000 ;バッファを確保する
  url="http://www.mynet.ne.jp/~simodate/" ;ターゲットにするURL
  ehttp_seturl url ;URLの設定
  ehttp_get buf ;ファイルを取得
  ehttp_refbodysize size ;ファイルサイズを取得
ehttp_refbodysize

ehttp_refbodyper - オブジェクトボディ読み込み済み% 参照命令
ehttp_refbodyper per

per  読み込み済み割合(%)を保存する数値型変数

[解説]

ehttp_getting命令によって読み込まれている途中経過を%で変数sizeに格納します。 ehttp_getting命令と組み合わせて途中経過を表示できます。
読み込み割合(%)の計算にはヘッダに含まれるContent-Lengthエンティティを用いています。 アクセスしているサーバーがContent-Lengthエンティティを返さない場合は常に0を返します。

[サンプル]

  sdim buf,64000 ;バッファを確保する
  url="http://www.mynet.ne.jp/~simodate/" ;ターゲットにするURL
  ehttp_seturl url ;URLの設定
*@ ehttp_getting buf ;ファイルを取得
  await 1 ;ウェイトを入れる
  ehttp_refbodyper per ;受信割合を取得
  title "Recieved:"+per+"%" ;受信割合をタイトルに表示
  if stat=1 : goto *@b ;ファイル取得を続ける
ehttp_refbodyper

ehttp_refstatus - HTTPステータスコード 参照命令
ehttp_refstatus status

status  ステータスコードを保存する数値型変数

[解説]

HTTPサーバからのステータスコードを取得します。
このコードはHTTPサーバにリクエストした結果が3桁の数字として表現されています。 ステータスコードは大別すると・・

  • 2xx: 成功 - リクエストされたアクションは、適切に受理され、理解された。
  • 3xx: リダイレクション(Redirection) - リクエストを完了するために別の追加アクションがなされる必要がある。
  • 4xx: クライアントエラー - リクエストに間違った構文があるか、または実行がもともと不可能である。
  • 5xx: サーバーエラー - サーバーは、リクエストを遂行できなかった。

のようになります。詳しくはHTTP関連の資料をご覧ください。

ehttp_refstatus

ehttp_reflastmod - リモートファイルの最終更新時間 参照命令
ehttp_reflastmod time

time  リモートファイルの最終更新時間を保存する文字列型変数

[解説]

ehttp_get命令やehttp_getting命令によって読み込まれたファイルの最終更新時間を取得します。
時刻のフォーマットは以下のようなフォーマットを持っており、その形式はサーバに依存します。 また、グリニッジ標準時間(GMT)と呼ばれる世界標準時間を用いて表現されます。

  • Sun, 06 Nov 1994 08:49:37 GMT
  • Sunday, 06-Nov-94 08:49:37 GMT
  • Sun Nov 6 08:49:37 1994
ehttp_reflastmod

ehttp_refgetphase - GET状態 参照命令
ehttp_refgetphase phase

phase  現在の読み込み処理のフェーズを保存する数値型変数

[解説]

ehttp_get命令やehttp_getting命令によるファイル取得の進歩度合いを取得します。
数値型変数phaseに返される値は次のような意味を持っています。

内容
-1 ファイルを取得していない
0 ソケットオープン
1 リクエスト送信
2 オブジェクトヘッダ取得(ファイルの付加情報)
3 オブジェクトボディ取得(ファイルの実体)
4 ソケットクローズ
5 テキストデータのコード変換
ehttp_refgetphase

コード変換命令  
ehttp_kanjicode - 漢字コード推定命令
ehttp_kanjicode code

code  推定する漢字コードが格納されているバッファ

[解説]

codeに格納された文字列から使われている漢字のコードを推定します。結果はrefstrに返され、次のような値を取ります。
なお、精度はそれほど良くはありません。

内容
JIS データはJISコードである。
SJIS データはShift-JISコードである。
EUC データはEUCコードである。
ehttp_kanjicode

ehttp_jis2sjis - JIS->SJIS漢字コード変換命令
ehttp_jis2sjis sjis_code,jis_code

sjis_code  変換されたS-Jisコードが保存されるバッファ
jis_code  Jisコードが保存されているバッファ

[解説]

バッファjis_codeに保存されているJISコードの内容を、Shift-JISコードに変換しバッファsjis_codeに保存します。
このときsjis_codeには十分な空き容量が必要です。

ehttp_jis2sjis

ehttp_euc2sjis - EUC->SJIS漢字コード変換命令
ehttp_euc2sjis sjis_code,euc_code

sjis_code  変換されたS-JISコードが保存されるバッファ
euc_code  EUCコードが保存されているバッファ

[解説]

バッファeuc_codeに保存されているEUCコードの内容を、Shift-JISコードに変換しバッファsjis_codeに保存します。
このときバッファsjis_codeには十分な空き容量が必要です。

ehttp_euc2sjis

ehttp_crlfconv - CR,LF->CRLF 改行コード変換命令
ehttp_crlfconv buf1,buf2

buf1  変換後のデータが格納されるバッファ
buf2  変換するデータが格納されているバッファ

[解説]

バッファbuf2に含まれる改行コード(CRまたはLF)を(CRLF)の改行コードに変換しbuf1に格納します。
このときバッファbuf1には十分な空き容量が必要です。

ehttp_crlfconv

▲top

注 意

このプログラムはフリーで無保証です。よって、このプログラムを使用して発生した、いかなる損害も保証いたしません。使用・添付・改造は 自由に行ってくださって結構です。再配布・転載もご自由に。でも、オリジナルの著作権は だてしむ にあるので、改造モノ単体でネットに 流すときとかはオリジナルと区別できるような配慮をお願いします。m(_ _)m
あと、添付の際はドキュメント付加の必要はありません。だって、こんなドキュメントって配布には邪魔になる・・でしょ?(^^;)

▲top

改訂履歴

ver 0.02b
(2002/07/03)
・日本語コード変更後のサイズ計算のバグを修正
・ehttp_get を複数回連続実行した場合のバッファオーバのバグを修正
・サンプルスクリプトを少し手直し
ver 0.02a
(2001/04/25)
・URLエンコード時に”?”を16進パック変換していたバグを修正
・Content-typeから日本語変換の有無を判別するルーチンを修正
ver 0.02
(2000/01/25)
・JIS->SJIS漢字コード変換の日本語半角カナに対応
・URL指定時のport番号の指定をサポート
・日本語コード変換関連命令のモジュール名を変更
ver 0.01
(1999/11/19)
・モジュール第2弾。とはいえ、やはり恐る恐る公開(^^;

▲top

最後に

恒例ながら(汗)、バグ・要望等があれば、報告していただければ幸いです。

▲top

一次配布元および連絡先

だてしむソフトウエア開発局 http://www.mynet.ne.jp/~simodate/

E-mail : dateshim@nifty.com (だてしむ)