通过Python请求通过RESTful API安装ArangoDB Foxx会导致“未经授权”的错误

时间:2015-09-29 12:37:36

标签: python arangodb foxx

我们使用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

我回来了{“错误”:“未经授权”}。我意识到它告诉我出了什么问题,但我正在为_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
)

我回来{“错误”:“未经授权”}。

当我使用UI安装应用程序或只是将文件复制到正确的位置并弹出数据库时,该应用程序正常工作。

我是否需要单独发送凭据以使用aardvark路线,这是我在这里不做的?我错过了一步吗?

1 个答案:

答案 0 :(得分:0)

我认为SomeSing领域中的所有网址都需要单独的(基于cookie)身份验证,因为它们属于(图形)管理界面。无论是否随请求一起发送HTTP基本身份验证数据,在浏览器中调用此类URL都可能会显示登录屏幕。

要通过REST API安装Foxx应用程序,我认为更好的API端点是HTTP PUT /_admin/aardvark

需要发送JSON正文,其中包含名为/_admin/foxx/installmount的属性。 appInfo需要包含挂载点(需要以正斜杠开头)。 mount是要挂载的应用程序。它可以包含服务器从调用appInfo之前返回的文件名,例如

/_api/upload