- - PR -
[急] Msxml2.XMLHTTP.3.0について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-19 18:25
こんにちは、Earlyheroです。
以下のVBSでサイトにアクセスしようとしています。 現状アクセスはできていますが、仮にサイトにアクセスできなくなった場合、 このままでは「send」した後にアクセスできずに止まってしまいます。 「open」した後に例外(アクセス不可)を判定したいのですが、 どなたか方法をご存知の方はいらっしゃらないでしょうか? 例外時は「WScript.Quit(番号)」で止めて番号を返したいと思っています。 ---------------------------------------------------------------------- Option Explicit Dim args Dim http Dim url Set args = WScript.Arguments Set http = CreateObject("Msxml2.XMLHTTP.3.0") url = "http://(アクセスしたいサイト)" Call http.open("POST", url, false) Call http.setRequestHeader("Content-type", "application/x-www-form-urlencoded") Call http.send("file=" & args(0)) ---------------------------------------------------------------------- お手数をおかけしますが、宜しくお願いします。 | ||||
|
投稿日時: 2007-12-19 18:35
タイムアウトしない、ということですか? | ||||
|
投稿日時: 2007-12-20 09:12
おはようございます。EarlyHeroです。
この件も急いでいたのですが、別件も大忙しだったので返信が遅れてしまいました。 Jittaさん、急いでいただいたのに申し訳ありません。 「Call http.open("POST", url, false)」で「false」にしているため タイムアウトせずに次の処理に向かっているようです。 「true」(またはパラメータを2つ)にするとタイムアウトするまで待つ ようですが、結構時間がかかります。 なるべく早く判断したいので、「false」にしています。 なので、「open」した後にアクセスできなかったことを判断したいと 思っています。そんなことって可能でしょうか? [ メッセージ編集済み 編集者: EarlyHero 編集日時 2007-12-20 09:13 ] | ||||
|
投稿日時: 2007-12-20 10:42
コールバックでレスポンスコードを判定ではだめなんですか?
| ||||
|
投稿日時: 2007-12-20 10:48
こんにちは、EarlyHeroです。
「コールバックでレスポンスコードを判定」とは具体的に どのような処理になるのでしょうか? レスポンスコード(応答値)を取得することでアクセスできたかどうか 判定できるということでよろしいでしょうか? | ||||
|
投稿日時: 2007-12-20 11:41
openの段階で送信していないのでは?
第3引数は非同期か同期のオプションです。意味を勘違いしていませんか? falseにすると非同期なので、直後にステータスコードを確認することは出来ません。 readyStateをチェックして完了になるまで待機する必要があります。 VBScriptはよく知りませんが、一般的にブラウザ+JavaScriptでは、 非同期通信の際にreadyStateの変更イベントを受け取るようにコーディングします。 さらに言うと、HTTPサーバは調子がよかろうと悪かろうと、 リクエスト元に対して常に都合のいいように状態を返すとは限りません。 正常でもリクエストを捕まえてレスポンスを中々返さない場合もあります。 ヒントになったでしょうか。 | ||||
|
投稿日時: 2007-12-20 11:59
こんにちは、EarlyHeroです。
第3引数は勘違いしていました。ご指摘ありがとうございます。 今回のように第3引数をfalseにして非同期にした場合 @readyStateプロパティの変更イベントを受け取るようにコーディングする AHTTPサーバーからレスポンスがなかなか返ってこない場合があるので、 レスポンス待ちの制御を加える @、Aともにコーディングの方法が分かりません。 実際のところ非同期にしていても遅くなる可能性があるということになりますね。 タイムアウトするまで我慢強く待つのとあまり変わらないのであれば 考え直さないといけないかもしれません。 | ||||
|
投稿日時: 2007-12-20 19:43
最初の投稿にある、「アクセスできなくなった場合」というのは、具体的にどんなことを想定していますか? DoSを受けていて反応できない サーバーがシャットダウンしていて、全く反応しなかった など、タイムアウトまで待たなければいけなさそうな状況もあると思います。 |