HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0310
湯坂HSPによる、HTMLファイルのダウンロードについて7解決


湯坂

リンク

2009/3/10(Tue) 22:03:43|NO.23799

hspinet.dll を使用して、ウェブからHTMLファイルのダウンロードを
するプログラムを書いてみましたが、ダウンロード先が会員用ページで
あるため、ダウンロードされたファイルが、「ログインして下さい」等の、
ログインページになってしまいます。

以前はブラウザでログインしておいてから実行すれば成功していましたが、
パソコンを買い換え、新しいパソコンで実行しても失敗してしまいます。

ブラウザでログインしてから実行しても、無意味なのでしょうか。
また、そうであるならば、HSPからダウンロード先にログインして
ダウンロードする事は出来ませんか。

教えていただけたら幸いです。
よろしくお願いします。



この記事に返信する


湯坂

リンク

2009/3/10(Tue) 22:07:21|NO.23800

訂正・追記です。


誤:パソコンを買い換え、新しいパソコンで実行しても失敗してしまいます。
正:パソコンを買い換え、新しいパソコンで実行すると失敗してしまいます。

また、以前のパソコンでは成功しましたが、
インターネット一時ファイルや履歴の削除をした後、出来なくなりました。



inovia

リンク

2009/3/10(Tue) 22:34:00|NO.23801

サイトによってログイン情報扱い方が違う為、
URLをあげておくと良い回答が得られるかもしれません。

主なログインのデータの保持方法

1.サーバー内でセッション管理(主にIPアドレスなど)
2.PostもしくはGetでデータを保持
3.Cookieにデータを保持



湯坂

リンク

2009/3/10(Tue) 23:07:37|NO.23804

inovia 様


ありがとうございます。
Post や Get などは、HSPの方から命令出来るんですか。
また、活用法が解りません。

サイトは、 http://www.ameba.jp/ などです。



inovia

リンク

2009/3/11(Wed) 01:28:46|NO.23807

アメーバ専用のログイン+ファイル取得サンプル
IDとパスワードは入力した上でご利用ください。(11行目)
62行目以降をいじくることでアメーバ内のいろんなファイルが取得可能です。 


#include "hspinet.as" #include "hspsock.as" //アメーバ専用です netinit;初期化 if stat!=0:dialog "err.":end //IDとパスワードを元にサーバーにcookieを発行してもらう //以下にアメーバのIDとパスを入れておきます。(HSPSOCK使用) id="":password="" sdim res,4096 sockopen 0,"www.ameba.jp",80 if stat : dialog "sock err. ["+stat+"]":end header="POST /login.do?amebaId="+id+"&password="+password+" HTTP/1.0\n header+="User-Agent: HSP ver3.0\n" header+="Cookie: GID=18\n\n" sockput header if stat!=0:dialog "send err. ["+stat+"]":end buf="":a="" b=0:sz=0 *wloop await 0 sockget a,64 if stat : dialog "socket error" : end b=peek(a,0):if b=0 : goto *sdok buf+=a sz+=64 if sz>30000 : dialog "受信サイズがオーバーしました。" : goto *sdok goto *wloop *sdok //instrでHTTP 302が返っているかどうか調べる notesel buf:buf2="" noteget buf2,0 if instr(buf2,0,"302")=-1:dialog "ログインに失敗しました。":end //HTTPヘッダからcookieのみを取り出す string="Set-Cookie: JSESSIONID=" tmp=instr(buf,0,string) if tmp=-1:dialog "セッションの取得に失敗しました。":end tmp2=instr(buf,tmp+strlen(string),";") jsessionid=strmid(buf,tmp+strlen(string),tmp2) string="Set-Cookie: N=" tmp=instr(buf,0,string) if tmp=-1:dialog "ログイン情報の取得に失敗しました。[1]":end tmp2=instr(buf,tmp+strlen(string),";") n=strmid(buf,tmp+strlen(string),tmp2) string="Set-Cookie: I=" tmp=instr(buf,0,string) if tmp=-1:dialog "ログイン情報の取得に失敗しました。[2]":end tmp2=instr(buf,tmp+strlen(string),";") i=strmid(buf,tmp+strlen(string),tmp2) netagent "www.ameba.jp" //エージェントの設定 netheader "Cookie: JSESSIONID="+jsessionid+";N="+n+";I="+i+"\n\n" //以下をいじることで、アメーバ内ファイルでしたら自由に取得可能です。 //試しにトップページを取得してみます。 neturl "http://www.ameba.jp/" netdlname "index.html" netload ""



湯坂

リンク

2009/3/11(Wed) 02:15:57|NO.23808

inovia 様


わざわざスクリプトまで書いていただいて、ありがとうございます。
おかげで成功しました。



また、その後自分なりに考えてみたのですが、



neturl "http://www.ameba.jp/" netdlname "user.login" netload "login.do?amebaId=" + name + "&password=" + pass


…これでも成功したんですが、
この方法では何か落とし穴があるんですかね。
( name,pass にはそれぞれのログインIDとパスワードを入れます)



ともかく、助かりました。
スクリプトは大切に使わせていただきます。

ありがとうございました。



inovia

リンク

2009/3/11(Wed) 20:15:34|NO.23824

どうも<(_ _)>

色々と後から調べてみましたところ、
hspinet.dllは内部でWinInet APIが使われておりIEと同期(?)しているらしく
IE上でログインをしておけば、認証が必要なページでもパスできる模様です。

だから、
>以前はブラウザでログインしておいてから実行すれば成功していました
だったのでしょう。

Cookieとかも勝手に管理してくれるので、以下のスクリプトだけでもOKな様子。


#include "hspinet.as" netinit;初期化 //ログインする neturl "http://www.ameba.jp/" name="":pass="" netdlname "user.login" netload "login.do?amebaId=" + name + "&password=" + pass //トップページ取得 neturl "http://www.ameba.jp/" netdlname "index.html" netload ""



湯坂

リンク

2009/3/13(Fri) 15:47:46|NO.23854

inovia 様

なるほど、そういう事でしたか。


しかし、

>以前はブラウザでログインしておいてから実行すれば成功していました

については、その後ログインしてから実行してみても失敗してました。
(ログイン用のスクリプトを実装していない時点での話です)

原因はおそらく、クッキーなどの情報を削除したからだと思うのですが、
それでも再びブラウザでログインすれば、その情報は記録されるはずなのに、
出来ないのは不思議でした。



とは言え、今は問題なく動作しているようなので、良いのですが。

ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.