2016-09-21 7 views
0

У меня есть следующий код для загрузки определенного файла из Интернета. на веб-странице есть имя файла, и если вы нажмете на него, вы получите «Вы хотите открыть или сохранить ....... из ......? Открыть/Сохранить/Отменить. это то, что я до сих пор:.загрузить excel file from web using vba

Dim ie As InternetExplorer 
    Dim html As HTMLDocument 
    Set ie = New InternetExplorer 
    ie.Navigate "http://customerservice.ciena.com/BidRegister/Queue.aspx?REGIONID=3" 
Set fe1 = html.getElementById("ctl00_P1_rdgFileList_ctl00_ctl00_btnGetFile") 
fe1.click 

в данный момент я получаю всплывающее сообщение я вам говорил выше, как я могу продолжать свой код, чтобы либо избежать этого поп-музыки и непосредственно сохранить файл в данном месте? есть строка кода, который сохраняет файл непосредственно?

ответ

2

из того, что я помню, с помощью Internet Explorer объект вы не можете обойти его подсказкам безопасности.

я обойти это на работайте с помощью запросов post/get через объект serverhttp, получив файл как тело ответа, а затем используйте объект ADODB, чтобы сохранить тело непосредственно в заданное место.

Вот пример запроса GET, который должен загрузить файл непосредственно из URL:

set objhttp = new MSXML2.ServerXMLHTTP60 
URL = "http://www.princexml.com/samples/catalog/PrinceCatalogue.pdf" 
objhttp.Open "GET", URL, False 
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
objhttp.send 
If objhttp.Status = 200 Then 
Set oStream = CreateObject("ADODB.Stream") 
    oStream.Open 
    oStream.Type = 1 
    oStream.Write objhttp.responseBody 
    oStream.SaveToFile "filepath and filename.pdf", 2 
    oStream.Close 
End If 

Чтобы сделать эту работу для запроса POST вам нужно немного больше информации. Для того, чтобы попытаться найти информацию, вам нужно будет использовать инструмент разработчика F12 на Internet Explorer:

  • Have InternetExplorer открытую на странице вы скачиваете из
  • нажмите F12, чтобы открыть инструмент разработчика
  • Нажмите on "Network"
  • Нажмите кнопку «играть» («Включить захват сетевого трафика»)
  • теперь загрузите файл, и вы должны увидеть POST, который запросил файл, который выкладывается в резюме Сети.
  • Дважды щелкните по этой строке POST в инструменте F12 и нажмите «Запросить тело», что бы там ни было, это золотая руда, то, что было отправлено на URL-адрес, чтобы запросить файл. Если вы можете интерпретировать это и развернуть его в своем коде, тогда вы его взломали.

последнее, что нужно сделать было бы изменить две строки в коде выше:

objhttp.Open "POST", URL, False 
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
objhttp.send (This is where you put the data string i.e. the REQUEST BODY) 

К сожалению, я не могу указать больше, есть тонны форматов, что запрос POST тело может иметь поэтому, не видя примера вашей системы, я не могу идти дальше.

+0

«Ввести строку с вашими файлами здесь» - это имя файла или что? –

+0

К сожалению, я не мог быть более конкретным с примером для этой части, потому что я не мог получить доступ к веб-сайту через URL-адрес, который вы предоставили для проведения теста. «Строка запроса файла» будет представлять собой пару ключей/значений, которые сообщают серверу, что вы после этого. Я попытаюсь найти пример загрузки файла, который вы можете реплицировать на своем сайте, чтобы понять суть его работы. – jamheadart

+0

Отредактированный ответ, чтобы показать обработанный пример для запроса GET, если вы можете использовать монитор сетевого трафика (для IE это кнопка F12), вы сможете увидеть, что представляет собой строка запроса POST при загрузке файла. Попробуйте подражать этому. – jamheadart