1

requests モジュールを使用して ArangoDB と Python を使用し、Arango の HTTP API を使用します。自動化されたテスト プロセスの一環として実行したい HTTP API を介して Foxx アプリをプログラムで展開する際に、認証の問題が発生しています。アプリをアップロードする唯一のプログラム例は、古いルートを使用しているようです。zipをアップロードできます:

http://mydev:8529/_db/mydb/_api/upload

私は戻ってきます:

{"filename": "uploads/tmp-13-718410"}

...そしてファイルはそこにあります。しかし、投稿データ {"zipFile": "uploads/tmp-13-718410"} でこれを試してみてください:

http://mydev:8529/_db/mydb/_admin/aardvark/foxxes/zip?mount=%2Fmy-mount-point

{"error": "unauthorized"} が返ってきます。何が問題なのかがわかりますが、_system dbとmydbの両方に基本認証を使用しています(ユーザー名/パスワードは両方で同じです)。問題なく HTTP API 経由でデータベースを作成/削除できますが、aardvark モジュールを使用できないようです。

私は2.6.8を使用しています。

Pythonでの私のコードは次のとおりです。

import requests

self._requests = requests.Session()
self._requests.auth = ('user', 'password')

# create the database
r = self._requests.post('http://mydev:8529/_api/database', json={'name': 'mydb', 'users': [{'username': 'user' 'passwd': 'password'}]})

...HTTP API を介したすべての検索、挿入などはすべて機能します。

その後、後で HTTP API 経由で Foxx アプリをインストールする場合:

r = self._requests.post('http://mydev:8529/_db/mydb/_api/upload', data=data) # succeeds
filename = r.json()['filename']

data = {'zipFile': filename}
r = self._requests.put(
    r'http://mydev:8529/_db/mydb/_admin/aardvark/foxxes/zip?mount=%2Fmy-mount-point',
    json=data
)

{"error": "unauthorized"} が返ってきます。

UI を使用してアプリをインストールするか、単にファイルを正しい場所にコピーしてデータベースをバウンスすると、アプリは正常に動作します。

ここで行っていない方法でツチブタルートを使用するには、資格情報を個別に送信する必要がありますか? 手順がありませんか?

4

1 に答える 1

0

/_admin/aardvarkレルム内のすべての URL が (グラフィカル) 管理インターフェイスに属しているため、別の (Cookie ベースの) 認証が必要な場合と思います。ブラウザーでこのような URL を呼び出すと、HTTP 基本認証データが要求と共に送信されるかどうかに関係なく、おそらくログイン画面が表示されます。

REST API 経由で Foxx アプリケーションをインストールするには、より良い API エンドポイントは HTTP PUT だと思います/_admin/foxx/install

mountおよびという名前の属性を持つ JSON 本文を送信する必要がありますappInfomountマウントポイントを含める必要があります (スラッシュで始める必要があります)。appInfoマウントするアプリケーションです。/_api/uploadへの呼び出しからサーバーによって以前に返されたファイル名を含めることができます。

{ 
    "appInfo" : "uploads/tmp-30573-2010894858", 
    "mount" : "/my-mount-point" 
}
于 2015-09-29T13:15:36.330 に答える