HTTPREQUESTオブジェクトでタイムアウトを設定するには?

解決


kyo  2004-07-08 14:11:59  No: 84453  IP: [192.*.*.*]

HTTPREQUESTを使用してHTMLデータを取得しようとしています。
下記のコードで、sendで取得要求した際に、ページによっては結果が返ってこず、そのままフリーズしてしまいます。
Source--------------------------------------------------------------
    Dim objRequest As Object
    Dim sHTML As String

    Set objRequest = CreateObject("MSXML2.XMLHTTP.3.0")

    objRequest.open "GET", sURL, False
    objRequest.send          '←ここでフリーズ
    sHTML = objRequest.responseText
--------------------------------------------------------------------
フリーズしないような良い対策はありませんでしょうか?

編集 削除
魔界の仮面弁士  2004-07-09 02:07:35  No: 84454  IP: [192.*.*.*]

> HTTPREQUESTオブジェクトでタイムアウトを設定するには?
XMLHTTPには、タイムアウトの設定はありません。
替わりに、ServerXMLHTTPの使用を検討してみてください。

.setTimeouts resolveTimeout, connectTimeout, 
sendTimeout, receiveTimeout

編集 削除
kyo  2004-07-09 12:13:51  No: 84455  IP: [192.*.*.*]

回答ありがとうございます。
さっそくServerXMLHTTPを使用してみたのですが、send時に
「サーバー名またはアドレスは解決されませんでした」と怒られます。
TCP/IPは普通に設定していて、IEからは普通に見れるのですが・・
Source--------------------------------------------------------------
Dim objRequest As Object
    Dim sHTML As String

    Set objRequest = CreateObject("MSXML2.ServerXMLHTTP")

    objRequest.open "GET", "http://www.yahoo.co.jp/", False
    objRequest.SetRequestHeader "Content-type", "text/html"
    objRequest.setTimeouts 3, 3, 3, 5
    objRequest.send
    sHTML = objRequest.responseText
--------------------------------------------------------------------
なにかsendする情報が足りないのでしょうか?

編集 削除
魔界の仮面弁士  2004-07-09 20:21:13  No: 84456  IP: [192.*.*.*]

MSXML3以下のバージョンでも動作しますが、可能であれば、MSXML4をインストールして、
    Set objRequest = CreateObject("MSXML2.ServerXMLHTTP.4.0")
の方が良いかと思います。


>    objRequest.setTimeouts 3, 3, 3, 5
時間が短すぎませんか?
単位は milliseconds (1000分の1秒)ですよ。


> 「サーバー名またはアドレスは解決されませんでした」と怒られます。
名前解決に対する時間制限は、setTimeouts の第1引数で指定します。
今回の場合、3ミリ秒以内に www.yahoo.co.jp というホスト名を、
210.81.150.5 という IP に変換できなかった場合、タイムアウト扱いになります。

編集 削除
kyo  2004-07-12 09:52:03  No: 84457  IP: [192.*.*.*]

魔界の仮面弁士様、回答ありがとうございました。
とりあえず取得はできるようになったのですが、
都合により、INETでHTMLを直取りする仕様になりましたので、
また行き詰った際にはご教授お願いします。
ありがとうございました。

編集 削除