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
--------------------------------------------------------------------
フリーズしないような良い対策はありませんでしょうか?
> HTTPREQUESTオブジェクトでタイムアウトを設定するには?
XMLHTTPには、タイムアウトの設定はありません。
替わりに、ServerXMLHTTPの使用を検討してみてください。
.setTimeouts resolveTimeout, connectTimeout,
sendTimeout, receiveTimeout
回答ありがとうございます。
さっそく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する情報が足りないのでしょうか?
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 に変換できなかった場合、タイムアウト扱いになります。
魔界の仮面弁士様、回答ありがとうございました。
とりあえず取得はできるようになったのですが、
都合により、INETでHTMLを直取りする仕様になりましたので、
また行き詰った際にはご教授お願いします。
ありがとうございました。
ツイート | ![]() |