none
Скачивание файла через прокси RRS feed

  • Вопрос

  • Есть программа для скачивания файлов,как к ней прикрутить использование прокси?В идеале лучше HTTP SOCKS4/5, но можно и просто http.Если можно скиньте исходник.

    • Перемещено PashaPash 6 ноября 2010 г. 16:34 (От:Языки программирования)
    3 ноября 2010 г. 10:17

Ответы

  • Должно, пробуйте =)

    Еще как вариант можно создать таймер и им отменять асинхронную операцию DownloadFileAsync

    WithEvents wc As WebClient
    WithEvents timeout As System.Timers.Timer
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      wc = New WebClient()
      wc.Proxy = New WebProxy("195.911.133.148", 8080)
    
      timeout = New System.Timers.Timer()
      timeout.AutoReset = False
      timeout.Interval = 1000
    
      timeout.Start()
      wc.DownloadFileAsync(New Uri("http://www.site.ru/base/users/7366.zip"), "C:\lol.zip")
    End Sub
    
    Private Sub wc_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
      If e.Cancelled Then
        MessageBox.Show("Cancel")
      ElseIf e.Error IsNot Nothing Then
        MessageBox.Show(e.Error.Message)
      Else
        MessageBox.Show("Complete")
      End If
    End Sub
    
    Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
      If timeout.Enabled Then
        timeout.Stop()
      End If
    End Sub
    
    Private Sub timeout_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timeout.Elapsed
      MessageBox.Show("Timeout")
      wc.CancelAsync()
    End Sub
    
    


    Для связи [mail]
    • Помечено в качестве ответа Lancer2404 7 ноября 2010 г. 8:29
    4 ноября 2010 г. 10:41

Все ответы

  •    Dim instance As New WebClient
       
        Dim value As IWebProxy = New WebProxy("195.911.133.148", 8080)
       
        instance.Proxy = value
      
       
        Dim timeout As WebRequest
        timeout.Timeout = 10
      
    
        Try
          instance.DownloadFileAsync((New Uri("http://www.site.ru/base/users/7366.zip")), "C:\lol.zip")
        Catch
          MsgBox("Dont Connect!")
        End Try
    
    Пробовал так.Но как сделать чтобы при нерабочем прокси выдавало ошибку?
    3 ноября 2010 г. 17:15
  • Try
      Dim wreq As WebRequest = WebRequest.Create("http://wazup.ru/wp-content/gallery/house/House-MD-642352_2.jpg")
      Dim proxy As New WebProxy("80.82.32.27", 3128)
    
      wreq.Proxy = proxy
      wreq.Timeout = 1000
    
      Dim wres As WebResponse = wreq.GetResponse()
    
      Dim buffer As Byte() = New Byte(8192) {}
    
      Using fs As FileStream = New FileStream("C:\lol.jpg", FileMode.Create, FileAccess.Write)
        Using s As Stream = wres.GetResponseStream()
          Dim nread As Integer
          Do
            nread = s.Read(buffer, 0, buffer.Length)
            fs.Write(buffer, 0, nread)
          Loop While nread <> 0
        End Using
      End Using
    Catch ex As WebException
      'error
    End Try
    
    
    Правда это синхронный вариант
    Для связи [mail]
    3 ноября 2010 г. 19:03
  • Подпишись на событие WebClient.DownloadFileCompleted. В параметре обработчика придет ошибка, в свойстве Error.
    3 ноября 2010 г. 22:45
  • Abolmasov Dmitry А если я твой код через BackgroundWorker сделаю.Будет работать?
    4 ноября 2010 г. 7:48
  • Должно, пробуйте =)

    Еще как вариант можно создать таймер и им отменять асинхронную операцию DownloadFileAsync

    WithEvents wc As WebClient
    WithEvents timeout As System.Timers.Timer
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      wc = New WebClient()
      wc.Proxy = New WebProxy("195.911.133.148", 8080)
    
      timeout = New System.Timers.Timer()
      timeout.AutoReset = False
      timeout.Interval = 1000
    
      timeout.Start()
      wc.DownloadFileAsync(New Uri("http://www.site.ru/base/users/7366.zip"), "C:\lol.zip")
    End Sub
    
    Private Sub wc_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
      If e.Cancelled Then
        MessageBox.Show("Cancel")
      ElseIf e.Error IsNot Nothing Then
        MessageBox.Show(e.Error.Message)
      Else
        MessageBox.Show("Complete")
      End If
    End Sub
    
    Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
      If timeout.Enabled Then
        timeout.Stop()
      End If
    End Sub
    
    Private Sub timeout_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timeout.Elapsed
      MessageBox.Show("Timeout")
      wc.CancelAsync()
    End Sub
    
    


    Для связи [mail]
    • Помечено в качестве ответа Lancer2404 7 ноября 2010 г. 8:29
    4 ноября 2010 г. 10:41
  • Ребят у меня два вопроса:После скачивание файла я немогу получить к нему доступ.Как закрыть поток?

    Возникла ошибка при внесении текста в текстбокс(юзаю BackgroundWorker) "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления".Прочитал что нужно работать с Invoke.Но не въехал че как делать.Приведите пример кода если можно.

    5 ноября 2010 г. 20:16
  • Поток завершается, как только завершится функция выполняемая в потоке, т.е. если вы скачиваете файл в потоке, то поток завершится как только файл скачается. BackgroundWorker должен вызвать событие RunWorkerCompleted. Посмотрите вызывается ли оно у вас?

    По поводу второго:

      Private Sub SetText(ByVal text As String)
        If TextBox1.InvokeRequired Then
          MessageBox.Show("2nd thead")
          TextBox1.Invoke(Sub() SetText(text))
        Else
          MessageBox.Show("ui thread")
          TextBox1.Text = text
        End If
      End Sub
    
    


    Для связи [mail]
    6 ноября 2010 г. 9:32
  • Скажите мне нужно теперь загрузить в буфер строчку из инета я меняю код:

    WithEvents wc As WebClient
    WithEvents timeout As System.Timers.Timer
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     wc = New WebClient()
     wc.Proxy = New WebProxy("195.911.133.148", 8080)
    
     timeout = New System.Timers.Timer()
     timeout.AutoReset = False
     timeout.Interval = 1000
    
     timeout.Start()
     wc.DownloadStringAsync(New Uri(url))
    End Sub
    
    Private Sub wc_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
     If e.Cancelled Then
      MessageBox.Show("Cancel")
     ElseIf e.Error IsNot Nothing Then
      MessageBox.Show(e.Error.Message)
     Else
      MessageBox.Show("Complete")
     End If
    End Sub
    
    Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
     If timeout.Enabled Then
      timeout.Stop()
     End If
    End Sub
    
    Private Sub timeout_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timeout.Elapsed
     MessageBox.Show("Timeout")
     wc.CancelAsync()
    End Sub
    
    Как мне получить данные?смотрел в мдсн там написано RESULT а где его взять ума не приложу.

    6 ноября 2010 г. 13:13
  • На ваш оригинальный вопрос давно ответили. Пометьте нужное сообщение как ответ и задайте вопрос "как скачать строчку из инета" в отдельной теме.
    6 ноября 2010 г. 16:34