0

R を使用してプログラムを作成し、いくつかの分析を実行しています。データは、JSON 形式の MongoDB を使用して外部ベンダーによってキャプチャされています。彼らは、ポート 443 の URI を介して私にそれを提供しており、cURL を使用して照会するよう求めています。認証が実施されており、自己署名 SSL があります。

Windows で curl を使用してデータを認証およびダンプできますが、長期的に持続可能なソリューションを作成するには、すべて R 内で行う必要があります。

ベンダーは、RCurl は機能するはずだと言っていますが、サポートを提供しておらず、基本的に RMongo を使用するという考えが好きではなく、コメントもありません (ただし、機能させることができれば、それは素晴らしいことです。私の意見)。

次のパッケージをロードしました-ggplot2-DBI-rjson-RJSONIO(rjsonを使用している場合、これをロードしない場合や、その逆の場合があります)-RMongo-rstudio-RCurl

自己署名証明書はcurlでも問題を引き起こしましたが、Rubyで設定を編集し、Rubyでcmdシェルを起動してcurlを使用することで解決しました. 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")

username = "xxxx" password="xxxxxxxxxxxxx" 認証済み <- dbAuthenticate(mongo, username, password) 2013 年 2 月 25 日 4:00:09 PM com.mongodb.DBTCPConnector fetchMaxBsonObjectSize 警告: java.io.IOException を使用して maxBSON サイズを決定する例外: [/127.0.0.1:27017] に接続できませんでした bc:java.net.ConnectException: 接続が拒否されました: com.mongodb.DBPort で接続します。open(DBPort.java:224) で com.mongodb.DBPort.go(DBPort.java:101) で com.mongodb.DBPort.go(DBPort.java:82) で 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) でcom.mongodb.DBApiLayer$MyCollection の .mongodb.DBTCPConnector.call(DBTCPConnector.java:193)。com.mongodb.DB.command(DB.java:159) で _find(DBApiLayer.java:303) com.mongodb.DB.command(DB.java:144) で com.mongodb.DB._doauth(DB.java :503) com.mongodb.DB.authenticate (DB.java:440) で rmongo.RMongo.dbAuthenticate (RMongo.scala:24) で

Error in .jcall(rmongo.object@javaMongo, "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)

どんな助けでも大歓迎です!

4

1 に答える 1

0

過去に RCurl に問題があり、セキュリティ証明書を明示的に指定して正常に動作させる必要がありました。私はこのようなものが必要になりました:

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

それを機能させるために必要な証明書を手動でエクスポートしました。

また、GET ではなく、その URI を指定して POST リクエストを実行する必要があるように見えます。postForm()コマンドを試してみてください。

追加するために編集:

わかりました、少し後ろに下がると、状況がもう少し明確になると思います。特定の URL からファイルを取得することが目標ですか (基本的には、R 内から wget を実行します)。それとも、必要なデータを後で返すフォームを送信することが目標ですか?

基本的な (そしてかなり安全でない) HTTP 認証の背後にあるものを取得しようとしているだけの場合は、次の 2 つのことを行う必要があります。

  • データ プロバイダーに、より安全なオプションを使用するよう伝えます
  • 次のように getURL() オプションを使用します (投稿した www.omegahat.org の例を使用):

コード:

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

ここで、データを取得するためにフォームを送信する必要がある場合は、通常、認証トークンなどをパラメーターとして渡します (上記の例では、「token=」.

于 2013-02-26T15:02:01.250 に答える