〜 ネットワーク 〜
クッキーを取得 (要WININET.DLL)

Windows標準搭載のWinInet.DLLのインターネットアクセス機能を用いて、
インターネットエクスプローラがハードディスクに保存しているクッキーデータを読み込みます。
クッキーを設定する場合はコチラを参照してください。
API関数InternetGetCookieで指定URLのCookieを取得するわけですが、
設定引数「URL」「キー」「格納バッファ」「サイズ」のうち、キーは指定しても効果がないようです。
指定URLの全データを指定サイズ分だけバッファに格納されるので、
全データの最初から最後まで全てを取得するためには、予め指定サイズ分以上のバッファを確保しておき、
API関数InternetGetCookieの取得サイズパラメータで全データ分のサイズを指定しなければなりません。
格納バッファポインタパラメータにNULL(=0)を指定することで、
実際の内容ではなくクッキーの全サイズが幾らになるかのサイズを取得するようになりますので、
予め先に取得するサイズを使って、サイズ分の格納バッファを用意して、全データを取得すると良いでしょう。
尚、HSP2はモジュール内でパラメータの変数を初期化すると、メイン側の変数とは別物になるので、
サンプルモジュールではHSP3だと1回でやってしまっている「変数サイズのみを返すパターン」と、
「変数に取得データを格納するパターン」処理を2つに分けています。
	

getcookie 取得情報, URL, サイズ
取得情報取得したキーとデータを含んだテキスト、または保存済サイズを格納する変数を指定する。
URL取得対象URLを指定する。
サイズ取得サイズを指定する。0または省略をすると、クッキーの全データサイズを変数に返す。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	ll_libload wininet, "wininet.dll"
	ll_getproc InternetGetCookie, "InternetGetCookieA", wininet

#module
#deffunc getcookie val, str, int
	if size : mref v, 24 : else : mref v, 16
	mref url, 33 : mref size, 2
	dim prm, 4
	ll_getptr url : ll_ret prm
	if size : ll_getptr v : ll_ret prm.2
	ll_getptr size : ll_ret prm.3
	ll_callfunc prm, 4, InternetGetCookie@
	if prm.2 = 0 : v = size
	return
#global

	sdim buf, 1000
	sdim address, 256
	address = "http://hspbc.jp/"
	objsize 50, 25 : objmode 2
	pos  10, 15 : mes "URL"
	pos  40, 10 : input address, 540, 25
	pos 580, 10 : button "Get", *get
	pos  10, 50 : mesbox buf, 620, 420, 1
	stop

*get
	getcookie len, address // サイズのみを取得
	sdim buf, len
	getcookie buf, address, len // データを取得
	objprm 2, buf
	stop

取得文字列 = getcookie(URL)
取得文字列取得したキーとデータを含んだテキストの受取先を指定する。
URL取得対象URLを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#uselib "wininet.dll"
#func  global InternetGetCookie "InternetGetCookieA" str, int, int, var

#module
#defcfunc getcookie str url, local i, local s
	InternetGetCookie url, , , i
	sdim s, i
	InternetGetCookie url, , varptr(s), i
	return s
#global

	sdim buf, 1000
	sdim address, 256
	address = "http://hspbc.jp/"
	objsize 50, 25 : objmode 2
	pos  10, 15 : mes "URL"
	pos  40, 10 : input address, 540, 25
	pos 580, 10 : button gosub "Get", *get
	pos  10, 50 : mesbox buf, 620, 420, 1
	stop

*get
	objprm 2, getcookie(address)
	return