Чтение информации с защищенного паролем сайта

Я использую 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

Спасибо.

Ответ 1

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

URL-адрес

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

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

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

Это может быть только Windows.

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

Ответ 2

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

http://userid:[email protected]:port/...

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

zz <- url("http://userid:[email protected]:port/...")
readLines(zz)
close(zz)

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

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

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

ИЗМЕНИТЬ:

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

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

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

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

Ответ 3

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

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

http://username:[email protected]

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

  • Кто-то задает вам аналогичный вопрос, и вы публикуете свой script
  • URL http://username:[email protected]... будет (?) теперь отображаться в журналах вашего сервера
  • ...

Ответ 4

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

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

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

РЕДАКТИРОВАТЬ Кроме того, похоже, что downloadFile просто переформатирует URL-адрес http://username:[email protected]? Хм...