Чтение информации с защищенного паролем сайта
Я использую 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]
? Хм...