分類:[.NET 全般]
2022/10/22(Sat) 20:24:53 編集(投稿者)
2022/10/22(Sat) 20:24:09 編集(投稿者)
<pre><pre>
<pre><pre>VB.NETを使ってダウンロードソフトを開発しております。
あるURLのファイル名を取得したいと考えています。
ほとんどのURLは以下のコードで問題無く取得できます。
ただ、URLによっては、まれに、
Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)
の部分でフリーズしてしまうことがあります。
特にエラーも無しに止まってしまうので、
Try Catchなどでも拾うことができません。
どうすれば、フリーズ無しに取得できますか?
あるいは予めフリーズするかどうか知ることはできますか?
ちなみに、ファイル自体は存在していても
フリーズする時はフリーズします。
Dim req As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)
req.Method = System.Net.Http.HttpMethod.Head.Method
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
Dim fileName As String = ""
'URLによってはなぜか、ここでフリーズすることがある
Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)
' ヘッダ情報からファイル名の取得
Dim dispos As String = res.Headers("Content-Disposition")
Dim dispos2 = System.Web.HttpUtility.UrlDecode(dispos)
Dim dispos3 = Uri.UnescapeDataString(dispos)
If Not String.IsNullOrEmpty(dispos) Then
Dim re As New Regex(
"filename\s*=\s* " &
"(?: " &
" ""(?<filename>[^""]*)"" " &
" | " &
" (?<filename>[^;]*) " &
") " _
, RegexOptions.IgnoreCase _
Or RegexOptions.IgnorePatternWhitespace)
Dim m As Match = re.Match(dispos)
If m.Success Then
fileName = m.Groups("filename").Value
End If
End If
</pre></pre>