簡體   English   中英

通過RESTful API通過Python安裝ArangoDB Foxx請求導致“未經授權”錯誤

[英]Installing ArangoDB Foxx via RESTful API via Python requests results in 'unauthorized' error

我們使用ArangoDB和Python使用請求模塊來使用Arango的HTTP API。 我在通過HTTP API以編程方式部署Foxx應用程序時遇到授權問題,這是我們在自動化測試過程中要做的。 我可以找到的唯一一個上載應用程序的程序示例似乎使用了過時的路由。 我可以上傳壓縮文件:

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安裝應用程序或將文件復制到正確的位置並啟動數據庫時,該應用程序運行良好。

我是否需要以我不在此使用的方式單獨發送憑據以使用aardvark路由? 我錯過了一步嗎?

我認為/_admin/aardvark領域中的所有URL都需要單獨的(基於cookie的)身份驗證,因為它們屬於(圖形)管理界面。 無論是否隨請求一起發送HTTP基本認證數據,在瀏覽器中調用此類URL都可能會顯示登錄屏幕。

要通過REST API安裝Foxx應用程序,我認為更好的API端點是HTTP PUT /_admin/foxx/install

它將需要發送帶有名為mountappInfo屬性的JSON正文。 mount需要包含mount點(需要以正斜杠開頭)。 appInfo是要掛載的應用程序。 它可以包含服務器先前從/_api/upload調用返回的文件名,例如

{ 
    "appInfo" : "uploads/tmp-30573-2010894858", 
    "mount" : "/my-mount-point" 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM