2017-08-25 90 views
0

我正在研究一些應用程序,以便從url下載不同日期的股票價格文件。我使用下面的代碼從網上下載多個文件

Conn = New OdbcConnection("DSN=RA;MultipleActiveResultSets=True") 
    If Conn.State = ConnectionState.Closed Then 
     Conn.Open() 
    End If 
    Dim mont As Date 
    mont = DateTimePicker1.Value 
    Dim dnldurlA As String = "http://www.nseindia.com/content/historical/EQUITIES/" 
    Dim dnldurlB As String = UCase(mont.ToString("MMM")) 
    Dim dnldurlC As String = "/" 
    Dim dnldurlD As String = "cm" 
    Dim dnldurlE As String = mont.ToString("dd") 
    Dim dnldurlF As String = mont.ToString("yyyy") 
    Dim dnldurlG As String = "bhav" 
    Dim dnldurlH As String = ".csv" 
    Dim dnldurlI As String = ".zip" 
    Dim dnldurlJ As String = "\" 
    Dim FileName As String = dnldurlE & dnldurlB & dnldurlF & ".ZIP" 
    Try 
     Dim downloadClient As New WebClient() 
     downloadClient.Headers("Accept") = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
     downloadClient.Headers("User-Agent") = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1" 
     Dim dnldurl As String = dnldurlA & dnldurlF & dnldurlC & dnldurlB & dnldurlC & dnldurlD & dnldurlE & dnldurlB & dnldurlF & dnldurlG & dnldurlH & dnldurlI 
     downloadClient.DownloadFile(New Uri(dnldurl), ("C:\" & FileName)) 
     While (downloadClient.IsBusy = True) 

     End While 
     downloadClient.Dispose() 
    Catch ex As Exception 
     MsgBox("File can not be downloaded!!!") 
     Me.Close() 
    End Try 

我下載的第一個文件,當我選擇其他日期後的文件堅持了,它拋出一個錯誤 {「遠程服務器返回錯誤:禁止(403) 「} 但是,當我退出應用程序並再次嘗試相同的日期時,文件即時下載。

請幫

在此先感謝 克里斯

+2

它可能是某種保護的網站添加防止人們迅速下載許多東西。有些網站只希望人們瀏覽並提供API來下載信息。 –

+0

我對代碼做了一些調整。無論如何,它在相當一段時間都令人困擾。謝謝 – Kris

+1

假設你在循環中做這樣的事情,你可以添加一個小的延遲來避免被限制。 – Plutonix

回答

0

我只是做了一個小的變化,它的工作完美

Conn = New OdbcConnection("DSN=RA;MultipleActiveResultSets=True") 
    If Conn.State = ConnectionState.Closed Then 
     Conn.Open() 
    End If 
    Dim mont As Date 
    mont = DateTimePicker1.Value 
    Dim dnldurlA As String = "http://www.nseindia.com/content/historical/EQUITIES/" 
    Dim dnldurlB As String = UCase(mont.ToString("MMM")) 
    Dim dnldurlC As String = "/" 
    Dim dnldurlD As String = "cm" 
    Dim dnldurlE As String = mont.ToString("dd") 
    Dim dnldurlF As String = mont.ToString("yyyy") 
    Dim dnldurlG As String = "bhav" 
    Dim dnldurlH As String = ".csv" 
    Dim dnldurlI As String = ".zip" 
    Dim dnldurlJ As String = "\" 
    Dim FileName As String = dnldurlE & dnldurlB & dnldurlF & ".ZIP" 
    Try 
     Dim downloadClient As New WebClient() 
     Dim dnldurl As String = dnldurlA & dnldurlF & dnldurlC & dnldurlB & dnldurlC & dnldurlD & dnldurlE & dnldurlB & dnldurlF & dnldurlG & dnldurlH & dnldurlI 
     downloadClient.DownloadFile(New Uri(dnldurl), ("C:\" & FileName)) 
     While (downloadClient.IsBusy = True) 

     End While 
     downloadClient.Dispose() 
    Catch ex As Exception 
     MsgBox("File can not be downloaded!!!") 
     Me.Close() 
    End Try 

感謝