Хобрук: Ваш путь к мастерству в программировании

Загрузка с помощью vbscript, некоторые файлы не завершены

Я использую следующий vbscript для автоматизации загрузки приложения с моего сайта:

HTTPDownload "bleh.com/hello.exe", "C:\"
HTTPDownload "bleh.com/hello1.dll", "C:\"
HTTPDownload "bleh.com/hello2.dll", "C:\"
HTTPDownload "bleh.com/hello3.dll", "C:\"

Sub HTTPDownload( myURL, myPath )
    Dim i, objFile, objFSO, objHTTP, strFile, strMsg
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set objFSO = CreateObject( "Scripting.FileSystemObject" )
    If objFSO.FolderExists( myPath ) Then
        strFile = objFSO.BuildPath( myPath, Mid( myURL, InStrRev( myURL, "/" ) + 1 ) )
    ElseIf objFSO.FolderExists( Left( myPath, InStrRev( myPath, "\" ) - 1 ) ) Then
        strFile = myPath
    Else
        Exit Sub
    End If
    Set objFile = objFSO.OpenTextFile( strFile, ForWriting, True )
    Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
    objHTTP.Open "GET", myURL, False
    objHTTP.Send
    For i = 1 To LenB( objHTTP.ResponseBody )
        objFile.Write Chr( AscB( MidB( objHTTP.ResponseBody, i, 1 ) ) )
    Next
    objFile.Close( )
End Sub

Странно, когда я запускаю скрипт, 2/4 файла загружаются полностью. Один из других файлов имеет размер всего 2 КБ (должен быть заполнен примерно на 180 КБ), а другой - 0 КБ (200 КБ заполнен).

Я дважды проверил на ftp-сервере, файлы, хранящиеся на них, заполнены на 100%, и загрузка их вручную через браузер работает нормально.

Почему мой скрипт не может полностью загрузить все четыре файла?

20.11.2013

Ответы:


1

Попробуйте использовать XMLHTTPRequest вместо WinHttpRequest и используйте поток ADO для сохранения (бинарных) файлов:

Sub HTTPDownload(url, path)
  Set req = CreateObject("Msxml2.XMLHTTP.6.0")
  req.open "GET", url, False
  req.send

  If req.Status = 200 Then
    Set stream = CreateObject("ADODB.Stream")
    stream.Open
    stream.Type = 1 'binary
    stream.Write req.responseBody
    stream.SaveToFile path
    stream.Close
  Else
    WScript.Echo req.status & " " & req.statusText
  End If
End Sub

Статус запроса может подсказать вам о проблемах. Также проверьте журнал сервера (если возможно).

20.11.2013
  • Я получаю ошибку записи в файл. в Windows 8, когда я пытаюсь это сделать. Хотя я админ и это не защищенный каталог. 20.11.2013
  • Файл уже существует? Если это так, вам нужно использовать stream.SaveToFile path, 2 (см. здесь ). 21.11.2013
  • Новые материалы

    Библиотеки PyTorch и Python для машинного обучения: приложения в здравоохранении с обнимающим лицом…
    В сфере машинного обучения Python выделяется благодаря своей универсальности и набору предлагаемых библиотек. Развитие машинного обучения в здравоохранении можно частично объяснить простотой и..

    «Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!
    «Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!

    5 вещей, которые я сделал, чтобы стать профессиональным разработчиком JavaScript
    Чтобы стать профессиональным JS-разработчиком: 1. Практикуйтесь в рутине, 2. Работайте над проектами, 3. Придерживайтесь одного языка, 4. Наблюдайте за чужим кодом, 5. Будьте последовательны..

    От теории к практике: пошаговое руководство по реализации наивного Байеса
    Вы когда-нибудь застревали в проекте классификации, не зная, как точно предсказать результаты для ваших данных? Вы искали более простой и интуитивно понятный алгоритм, который поможет вам достичь..

    #093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
    TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..

    numberToString.js (8kyu 16)
    Алгоритм кодовых войн Проблема Нам нужна функция, которая может преобразовать число в строку. 숫자를 문자열로 변환하는 함수를 작성해라. Решение 01 function numberToString(n) { return n.toString(); }..

    Лучшие практики для быстрого изучения языка программирования
    Изучение языка программирования может быть сложной задачей, но при правильном подходе определенно возможно быстро выучить язык программирования. Хорошее понимание языка программирования может..