Чтение информации с защищенного паролем сайта - PullRequest
13 голосов
/ 24 марта 2011

Я использую readLines () для очистки информации с веб-сайта в учебнике по R.Теперь я хочу извлечь данные с моего собственного веб-сайта (в частности, данные awstats), однако домен защищен паролем.

Есть ли способ передать URL-адрес для конкретных данных awstats, которые мне нужны, с помощью имени пользователя ипароль.

формат URL:

http://domain.name:port/awstats.pl?month=02&year=2011&config=domain.name&lang=en&framename=mainright&output=alldomains

Спасибо.

Ответы [ 4 ]

7 голосов
/ 24 марта 2011

Вы можете встроить имя пользователя и пароль в URL, например:

http://userid:passw@domain.name:port/...

Это вы можете попробовать использовать с readLines(). Если это не сработает, вы всегда можете попробовать обходной путь, используя url(), чтобы открыть соединение:

zz <- url("http://userid:passw@domain.name:port/...")
readLines(zz)
close(zz)

Вы также можете скачать файл и сохранить его где-нибудь, используя download.file()

download.file("theurl","/path/to/file/filename",method="wget")

Сохраняет файл по указанному локальному пути.

РЕДАКТИРОВАТЬ:

Как сказал csgillespie, вы не должны включать свое имя пользователя и пароль в скрипт. Если вы запускаете сценарии с помощью source () или в интерактивном режиме, вы можете добавить, например:

user <- readline("Give the username : ")
passw <- readline("Give the password : ")

Url <- paste("http://",user,":",passw,"@domain.name...")
readLines(Url,...)

При запуске из командной строки вы можете передать аргументы после --args и получить к ним доступ, используя commandArgs (см. ?commandArgs)

7 голосов
/ 24 марта 2011

Если это действительно базовая аутентификация доступа http, документация по connections предоставляет некоторую помощь:

URL-адрес

Обратите внимание, что https: // соединения поддерживается только если --internet2 или setInternet2 (TRUE) был использован (чтобы сделать использование внутренних компонентов Internet Explorer), и тогда только если сертификат считается действительным. С этим только опция, http://user:pass@site нотация для сайтов, требующих аутентификация также принимается.

Итак, ваша строка URL должна выглядеть так:

http://username:password@domain.name:port/awstats.pl?month=02&year=2011&config=domain.name&lang=en&framename=mainright&output=alldomains

Хотя это может быть только для Windows.

Надеюсь, это поможет!

3 голосов
/ 24 марта 2011

Если у вас есть доступ к коробке, вы всегда можете просто прочитать файлы журнала awstats. Если вы можете использовать ssh в поле, вы можете легко синхронизировать последний файл, используя rsync.

Небольшая загвоздка с использованием

http://username:password@domain...

означает, что вы вводите свой пароль в R-скрипт - лучше всего этого избежать. Конечно, вы можете защитить его скриптом, но это займет всего одну ошибку. Например,

  • Кто-то задает вам аналогичный вопрос, и вы публикуете свой сценарий
  • URL http://username:password@domain... теперь будет (?) Показываться в журналах вашего сервера
  • ...
2 голосов
/ 15 июля 2015

Форматирование URL-адреса как http://username:password@domain... для использования с download.file не работает для меня, но R.utils предоставляет функцию downloadFile, которая прекрасно работает:

require(R.utils)
downloadFile(myurl, myfile, username = "myusername", password ="mypassword")

См. Ответ @ joris-meys, чтобы избежать включения вашего имени пользователя и пароля в виде простого текста в вашем скрипте.

РЕДАКТИРОВАТЬ Кроме того, что похоже на downloadFile просто переформатирует URL-адрес для http://username:password@domain...? Хм ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...