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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1226
Velgail[hspinet]JavaScript必須と称するページのダウンロード方法5解決


Velgail

リンク

2015/12/26(Sat) 22:57:42|NO.73802

hspinetで質問です。

http://hspupdate.lv9.org/ をhspinetでnetrequest_getで取得しようとすると、
結果として、「JavaScript必要だから対応ブラウザでアクセスしてね」という専用ページになります。

つまり、「このクライアントはJavaScript対応だから本当のデータよこせ」と書くにはどのようにすればいいですか?

以下サンプルコード:

#include "hspinet.as" netinit neturl "http://hspupdate.lv9.org" netrequest_get "/" repeat netexec p1 if (p1) { break } await 100 loop netgetv data mesbox data,640,480



この記事に返信する


zero

リンク

2015/12/27(Sun) 09:32:39|NO.73803

ちょっと調べてみたところ、hspupdate.lv9.orgに初めてアクセスすると、'__test'という
名前のCookieを保存するようです(初回アクセス時のみ、/?ckattempt=1にリダイレクトされる)。
そのCookieが指定されていないと、件のJavaScriptを有効にしろという応答がGETメソッド
で返ってくるようです。
Firefoxなどの普通のブラウザでURLにアクセスするとそのCookieが保存されますので、
設定メニューから保存されたCookieを見ることができますが、私の環境では
"900074836347fea0aa0cdde41d03a35c"という乱文字列でした。この乱文字列は恐らく
環境によって違うと思いますので、これを指定しても私のPCだけでしか有効でないと思います。

もし、その乱文字列が何らかの手段で知ることができれば、
InternetSetCookie APIを使って以下のサンプルのようにCookieを設定すれば、
望み通りの応答を取得することができます。
ただし、私の場合は、一度Firefoxでアクセスして乱文字列を得た上で、HSPスクリプト上で
設定するという方法をとっているので、これをHSP単体で行なうのは難しいかと思います。


#uselib "wininet.dll" #func InternetSetCookie "InternetSetCookieA" sptr,sptr,sptr #include "hspinet.as" // '__test'に対応する乱文字列は環境(PC)によって違う InternetSetCookie "http://hspupdate.lv9.org", "__test", "25a4dbfc92906fc60f7b5e8ecbf8e076" netinit neturl "http://hspupdate.lv9.org" netrequest_get "/" repeat netexec p1 if (p1) { break } await 100 loop netgetv data mesbox data,640,480



inovia

リンク

2015/12/27(Sun) 10:36:05|NO.73804

手元の環境ではこれで動いたんだけど、どうなんだろう?
IE経由でCookieを取得します。


#include "hspinet.as" // Cookieを取得するために、IEを実行します newcom ie, "InternetExplorer.Application" ie("Visible") = 0 ie("Silent") = 1 ie->"Navigate" "http://hspupdate.lv9.org/" repeat : wait 10 : if( ie("Busy") == 0 ) { break } : loop // Cookieの監視 // 無限ループに陥る可能性があるので、 // タイムアウト処理を追加すると良い repeat pDoc = ie("document") cookie = pDoc("cookie") if "" != cookie : break delcom pDoc wait 10 loop delcom pDoc ie->"Quit" delcom ie netinit neturl "http://hspupdate.lv9.org" netheader "Cookie: " + cookie + "\n\n" netrequest_get "/" repeat netexec p1 if (p1) { break } await 100 loop netgetv data mesbox data,640,480



zero

リンク

2015/12/27(Sun) 10:58:01|NO.73806

netheaderって命令があったんですね。
普段hspinetを使わないので知らなかった...

あと恐らくですが、Cookieは一度取得してしまえば長らく変わらないと思うので、
(IPが変わると変わるのかもしれないが)、毎回調べる必要は無いように思います。



Velgail

リンク

2015/12/29(Tue) 08:04:48|NO.73822

お二方の回答 ありがとうございました。
以下のようにすることで、無事Windows 8.1でも動作することを確認できました。(間の子ですw


#include "hspinet.as" #uselib "wininet.dll" #func InternetSetCookie "InternetSetCookieA" sptr,sptr,sptr // Cookieを取得するために、IEを実行します newcom ie, "InternetExplorer.Application" ie("Visible") = 0 ie("Silent") = 1 ie->"Navigate" "http://hspupdate.lv9.org/" repeat : wait 10 : if( ie("Busy") == 0 ) { break } : loop // Cookieの監視 // 無限ループに陥る可能性があるので、 // タイムアウト処理を追加すると良い repeat pDoc = ie("document") cookie = pDoc("cookie") if "" != cookie : break delcom pDoc wait 10 loop delcom pDoc ie->"Quit" delcom ie InternetSetCookie "http://hspupdate.lv9.org", "__test", strmid(cookie,instr(cookie,0,"__test=")+7,instr(cookie,instr(cookie,0,"__test")+7,";")) // title strmid(cookie,instr(cookie,0,"__test=")+7,instr(cookie,instr(cookie,0,"__test")+7,";")) netinit neturl "http://hspupdate.lv9.org" // netheader "Cookie: " + cookie + "/;\n\n" netrequest_get "/" repeat netexec p1 if (p1) { break } await 100 loop netgetv data mesbox data,640,480



Velgail

リンク

2015/12/29(Tue) 10:10:50|NO.73826

解決フラグが立ってなかったので、追記。



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