RCurlパッケージを使用してPiCloud's REST APIのRラッパーを実装して、APIサーバーへのHTTP(S)要求を行っています。 APIは基本的なHTTP認証を使用して、ユーザーに十分なアクセス許可があることを確認します。 PiCloudのドキュメントでは、APIを使用し、カールで認証する例を示しています。RCurl:サイトがWWW認証なしでHTTP 401コードで応答したときのHTTP認証
$ curl -u 'key:secret_key' https://api.picloud.com/job/?jids=12
これは完全に機能します。同等のRCurlのコマンドにこれを翻訳:私はcurlコマンドによって行われたHTTPリクエストが含まことを発見し、より深さの問題を探る
[1] "{\"error\": {\"msg\": \"No HTTP Authorization information present\", \"code\": 995, \"retry\": false}}"
:
この機能を実行するgetURL("https://api.picloud.com/job/?jids=12", userpwd="key:secret")
私は、次のエラーメッセージが表示されます。最初のGETコマンドのAuthorizationフィールド。
RCurlはこれを行いません。その代わりに、最初に許可フィールドが設定されていないGET要求を送信します。 401エラーコードとWWW-Authenticateフィールドの応答を受け取った場合は、Authorizationフィールドで別のGET要求を送信します。
HTTP仕様では、WWW-Authenticateフィールドを含めるために401エラーコードで返されるメッセージが必要ですが、PiCloud APIメッセージには含まれていません。したがって、userpwdオプションを指定してもgetURL
を呼び出すと、RCurlは許可フィールドが設定されたGET要求を送信しません。その結果、認証は常に失敗します。
RCurlに送信する最初のGETメッセージのAuthorizationフィールドを強制的に設定する方法はありますか?そうでない場合は、私が調べることができる他のRパッケージがありますか?
私は時間のためにこれを追跡しようとしてきました。ありがとう! –
再利用可能なカールハンドルを渡す場合は、 'getCurlHandle()'の呼び出しで 'httpauth = 1'を設定する必要があります。 (これは 'postForm()'が基本認証で動作する唯一の方法でした: 'httpauth'を' postForm() 'のパラメータとして渡しても動作しませんでした) –