繁体   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