2013-02-26 3 views
0

Я использую R для написания программы и выполнения некоторых анализов. Данные записываются сторонним поставщиком с MongoDB в формате JSON. Они предоставляют его мне через URI на порту 443, который они хотят, чтобы я запрашивал с использованием cURL. У них есть аутентификация и самоподписанный SSL.Как использовать RCURL или RMongo через HTTP с аутентификацией и самоподписанным SSL для чтения в данных JSON

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

Продавец говорит, что RCurl «должен» работать, но они Арен» t предоставляя какую-либо поддержку, и они в основном просто не любят идею использования RMongo и не комментируют это (но если бы мы могли заставить это работать, это было бы потрясающе, на мой взгляд).

я следующие пакеты загружены - ggplot2 - DBI - rjson - RJSONIO (я иногда не загружать этот, если я использую rjson или наоборот) - RMongo - rstudio - RCURL

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

При попытке пройти RCurl маршрут я в конечном итоге с командами/ошибок, как это:

x <- getURL("https://xxx.xx.xxx.xxx:443/db/_authenticate", userpwd="xxxx:xxxxx") }{Error in function (type, msg, asError = TRUE) : couldn't connect to host 

и при попытке использовать RMongo я еще более невежественны ...

> mongo <- mongoDbConnect("xxx.xx.xxx.xxx") 

имя пользователя = "хххх" пароль = "XXXXXXXXXXXXX" подлинности < - dbAuthenticate (монго, имя пользователя, пароль) 25 февраля 2013 4:00:09 PM com.mongodb.DBT CPConnector fetchMaxBsonObjectSize ПРЕДУПРЕЖДЕНИЕ: Исключение, определяющее размер maxBSON using0 java.io.IOException: не удалось подключиться к [/127.0.0.1:27017] bc: java.net.ConnectException: соединение отклонено: подключите к com.mongodb.DBPort. open (DBPort.java:224) at com.mongodb.DBPort.go (DBPort.java:101) at com.mongodb.DBPort.go (DBPort.java:82) at com.mongodb.DBPort.findOne (DBPort.java:142) на com.mongodb.DBPort.runCommand (DBPort.java:151) на com.mongodb.DBTCPConnector.fetchMaxBsonObjectSize (DBTCPConnector.java:429) в com.mongodb.DBTCPConnector.checkMaster (DBTCPConnector .java: 416) at com.mongodb.DBTCPConnector.call (DBTCPConnector.java:193) at com.mongodb.DBApiLayer $ MyCollection. _find (DBApiLayer.java:303) at com.mongodb.DB.command (DB.java:159) at com.mongodb.DB.command (DB.java:144) at com.mongodb.DB._doauth (DB.java:503) в com.mongodb.DB.authenticate (DB.java:440) в rmongo.RMongo.dbAuthenticate (RMongo.scala: 24)

Error in .jcall([email protected], "Z", "dbAuthenticate", username, : 
com.mongodb.MongoException$Network: can't call something 
Feb 25, 2013 4:00:10 PM com.mongodb.DBPortPool gotError 
WARNING: emptying DBPortPool to 127.0.0.1:27017 b/c of error 
java.io.IOException: couldn't connect to [/127.0.0.1:27017]  bc:java.net.ConnectException: Connection refused: connect 
at com.mongodb.DBPort._open(DBPort.java:224) 
at com.mongodb.DBPort.go(DBPort.java:101) 
at com.mongodb.DBPort.go(DBPort.java:82) 
at com.mongodb.DBPort.call(DBPort.java:72) 
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:202) 
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:303) 
at com.mongodb.DB.command(DB.java:159) 
at com.mongodb.DB.command(DB.java:144) 
at com.mongodb.DB._doauth(DB.java:503) 
at com.mongodb.DB.authenticate(DB.java:440) 
at rmongo.RMongo.dbAuthenticate(RMongo.scala:24) 

любая помощь будет очень ценим!

+1

Ваше имя, скорее всего, вводит в заблуждение. Вы не используете http :, а https: –

ответ

0

У меня была проблема в прошлом с RCurl, где мне нужно было явно указать ее на сертификаты безопасности, чтобы заставить ее работать нормально. Я получил что-то вроде этого:

out <- postForm("https://url.org/api/", 
       token="IMATOKEN", 
       .opts=curlOptions(cainfo="C:/path/aaa.crt")) 

Я вручную экспортировал сертификат, который мне нужен, чтобы получить эту работу.

Кроме того, похоже, что вы должны делать запрос POST с учетом URI, а не GET. Попробуйте команду postForm(), может быть?

отредактирован ADD:

Хорошо, я думаю, что все могло бы быть немного более ясным, если мы шаг назад в секунду. Ваша цель получить некоторый файл с определенного URL (в основном, делать wget, но из R)? Или ваша цель представить форму, которая впоследствии возвращает данные, которые вам нужны?

Если вы просто пытаетесь получить что-то, что находится позади основной (а также довольно небезопасных) аутентификации HTTP, вы должны сделать две вещи:

  • Скажите поставщику данных, чтобы использовать более безопасный вариант
  • Используйте опцию GetURL(), как показано на рисунке (используя www.omegahat.org пример о котором вы писали):

Код:

getURL("http://www.omegahat.org/RCurl/testPassword/",.opts=list(userpwd="bob:welcome")) 
OR 
getURL("http://bob:[email protected]/RCurl/testPassword/") 

Теперь, если вам нужно отправить форму для получения данных, вы обычно должны передавать токены аутентификации и т. Д. В качестве параметров (так, в приведенном выше примере, `token = '.

+0

Спасибо TARehman, сейчас я собираюсь опробовать ваши решения. Как относительный нуб мне может потребоваться немного времени, но я отправлю обратно этим утром! – Jason

+0

Где идут номера пользователя/прохода и номера портов? – Jason

+0

Хммм, хорошо, поэтому я попробовал запустить этот пример вашей команды, которую я нашел в Интернете, и он также возвращает ошибку для меня. Означает ли это, что у меня может возникнуть проблема с корпоративным брандмауэром? Я могу легко загружать пакеты в RStudio, поэтому я думал, что брандмауэр не является проблемой ... '#postForm (" http://www.omegahat.org/RCurl/testPassword/form_validation.cgi ", your_name = "Дункан", your_age = "35-55", your_sex = "м", представить = "отправить", .opts = список (userpwd = "боб: приветственные")) Ошибка в функции (тип, сообщ , asError = TRUE): не удалось подключиться к host' – Jason