R — не удается загрузить файл gz с FTP-сервера

#r #curl #download #ftp

#r #curl #Скачать #ftp

Вопрос:

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

URL-адрес:

 u <- "ftp://user:password@109.2.160.55/AGLO/2020/10/AGLO_00001_03-0_GDBX_1000077_202010032206_860101.CSV.gz"
  

Когда я копирую и вставляю эту ссылку в Firefox, я могу загрузить файл, но с помощью R я не могу. Я попытался download.file , GET , writeBin , getURL . Все не удалось: getURL выдает следующую ошибку:

 Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
  embedded nul in string: '37‹bbøÙx_03AGLO_00001_03-0_GDBX_1000077_202010032206_860101.CSV¬\M³£¸’Ý¿_Áî­º02I  Xɶ®­*fn>nÔ­MÇ›231·èͼ210î×21óóç¤0406#¹.Œ§ ¢ë’צŽ’TæÉ17¡ÎUS*üï·30ÿ±ßbñKüÛùtøþ33#A–ýÆc36ãgÁy,177Ë%~f_ŽÝ{é~,év%}¡\~ÐIN¿ÿùï?~ÿ217¿þýÏ¿þ(17±34oY¾ýë¯?þû÷?ÿ$qù·Å/pv÷177{£òð]U½.umÊ¿235»¦/{s~ƒ”220–7ÓŸ¢Ã¿þø¯177þã¯ÿ)ó¸ÈŠ22_eEœã·îúz-K31—í £¯ZÕÑW5´º …H9/{Uéú¨K^BfNôsT©è]·­n215ŽÊ221œ©²¦¯”e/æ»7efIy‹231Ä_"ayF?ÈñÏýsåQUGüâ3ô¼H’dt17724Hàgœ•ê=ºªópR„235笼02á¹VÇaðºRFy°yb6Ç_xz¹d¯Àf<—I2Â.30›04f°302­ZÓõ@2735Z£ê23ÀDz( \7CwT}ÉJ215¿»nè£þ¢201230Ô^>"§33×ø3#çLäž¾éc›õ35§‰`wàr2220pg-êøë »èÖjØCï03çeý÷37j210êoM}n"ÝG׫ÆCÂ:£úï]S«è¢a_*°34¹Z1636C34XŽÜ¼œBð8YX217»amp;ã‘t=†›êz=´X…`yyÓ]g-G177é¾Ü¾(ü颶9`235Ñ­31ÎXË1633*RÚwÏmèûgàešf|01Þ]23xžYËï/F·235}04ptM{Òj200·);ݾ33230ýE03úY_u215‡`j,´Û¾^°8}iëf<23Kå21702,àP2a­Éß06‚%åMr¦ªì“¸Ý`jã%°“{ú±AùiÊ_s;ô_ºÄî04Öí0vý4ÜTÿá ÿÚœL5þv‡¹0ž’ÃxÁ夒25l
  

Никаких проблем с прокси-сервером нет, поскольку для получения u URL-адреса я ищу в каталоге FTP.

Как я могу загрузить этот файл fing?

Также другим способом, которым я мог бы обойти это, является использование:

 browseURL(u,
            browser = "C:/Program Files (x86)/Mozilla Firefox/firefox.exe")
  

Проблема в том, что он откроет браузер Firefox, который будет:

  1. Спросите меня, уверен ли я, что хочу перейти на этот сайт, а затем
  2. Спросите меня, что я хочу сделать с этим файлом (не такая уж большая проблема, поскольку я могу выбрать значение по умолчанию для постоянной загрузки, но все же я не хочу)

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

Я в таком отчаянии, что могу сообщить вам имя пользователя и пароль в частном порядке.

Комментарии:

1. Похоже, могут возникнуть проблемы с тем, как кодируется ваша строка, попробуйте передать u enc2utf8 .

2. getURL(enc2utf8(u)) та же ошибка

3. Здесь немного слепо: попробуйте использовать httr для загрузки файла что-то вроде GET(u, write_disk("myfile.gz", overwrite=TRUE))

4. Я получил эту ошибку, но, как ни странно, она все еще работала! Ошибка: оператор $ недопустим для атомарных векторов

5. Итак, он работал с использованием httr ? Если это так, я могу опубликовать свой комментарий в качестве ответа, чтобы закрыть вопрос.

Ответ №1:

По-видимому, загрузка файла на диск с помощью httr решила проблему. Можно объединить write_disk и httr::GET загрузить файлы на диск следующим образом:

 library(httr)

to_download <- "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"

# Download pdf to disk
GET(to_download, write_disk("dummy.pdf"))