415 неподдерживаемый тип носителя в артефакте AQL POST - PullRequest
0 голосов
/ 19 сентября 2018

Вероятно, простая ошибка, но я получаю ошибку 415 Unsupported Media Type с этим простым Artifactory AQL POST.Я получаю ту же ошибку независимо от того, включаю ли я заголовок типа содержимого.

#!/usr/local/bin/python
import requests
import json

username = "admin"
password = "password"
url = "http://myhost:8081/artifactory/api/search/aql"

r = requests.post(url, auth=(username, password), headers={"content-type":"application/json"}, json='{items.find( { "repo":{"$eq":"test-repo"} })}')

if r.status_code == 200:
    print "Success!\n"
    print r.content
else:
    print "Fail\n"
    print r.text

{"errors": [{"status": 415, "message": "Unsupported Media Type"}]}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я наткнулся на ту же проблему, она сработала, когда я изменил тип контента на 'text / plain'.Просто чтобы дополнить ответ @ DarthFennec, предоставив официальные цитаты API REST , цитаты :

Пример использования:

POST / api / search / aql

items.find(
    {
        "repo":{"$eq":"libs-release-local"}
    }
)

Производит: application / json Пример вывода:

{
    "results" : [
    {
        "repo" : "libs-release-local",
        "path" : "org/jfrog/artifactory",
        "name" : "artifactory.war",
        "type" : "item type",
        "size" : "75500000",
        "created" : "2015-01-01T10:10;10",
        "created_by" : "Jfrog",
        "modified" : "2015-01-01T10:10;10",
        "modified_by" : "Jfrog",
        "updated" : "2015-01-01T10:10;10"
    }
    ],
    "range" : {
    "start_pos" : 0,
    "end_pos" : 1,
    "total" : 1
    }
}

Обратите внимание, что Content-type обозначает тип (формат) данных в запросе (поэтому, согласно документу, он ожидает text / plain).) в то время как Accept уведомляет об ожидаемом ответе (здесь артефакт вернет JSON).

0 голосов
/ 19 сентября 2018

AQL не является JSON.Текст внутри items.find(...) отформатирован как JSON, но весь запрос в целом не соответствует стандарту JSON.Ожидаемый тип содержимого: text/plain.

Также вместо json='{items.find( { "repo":{"$eq":"test-repo"} })}' следует использовать data='items.find( { "repo":{"$eq":"test-repo"} })'.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...