【问题标题】:Installing ArangoDB Foxx via RESTful API via Python requests results in 'unauthorized' error通过 Python 请求通过 RESTful API 安装 ArangoDB Foxx 会导致“未经授权”错误
【发布时间】:2015-09-29 12:37:36
【问题描述】:

我们使用 ArangoDB 和 Python,使用 requests 模块来使用 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 安装应用程序或简单地将文件复制到正确的位置并弹回数据库时,应用程序运行良好。

我是否需要单独发送凭据才能以我不在这里使用的方式使用土豚路线?我错过了一步吗?

【问题讨论】:

    标签: python arangodb foxx


    【解决方案1】:

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

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

    它需要发送一个 JSON 正文,其属性名为 mountappInfomount 需要包含挂载点(需要以正斜杠开头)。 appInfo 是要挂载的应用程序。它可以包含服务器先前从调用/_api/upload 返回的文件名,例如

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

    【讨论】:

    • 谢谢!我明显误会了。我会试试这个并报告。
    • 这已经回答了我的问题,但需要稍作改动 - /_admin_foxx/install 的 HTTP 方法是 PUT 而不是 POST。非常感谢!
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2021-05-10
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多