2016-08-02 21 views
0

Я использую Postman и Javascript для запроса API-интерфейса Confluence на учетной записи Cloud atlassian.net.Confluence REST API Search - ошибка с кодировкой CQL-запрос при кодировании

Когда я использую + в местах пространства для CQL это работает для меня (так что это не вопрос разработки разрешения - это работает !!):

https://mycompany.atlassian.net:443/confluence/rest/api/content/search?os_authType=basic&cql=type=page+and+space+in+(DEV,OPS)+and+title+~+deploy 

Однако использование пространства не :

https://mycompany.atlassian.net:443/confluence/rest/api/content/search?os_authType=basic&cql=type=page and space in (DEV,OPS) and title ~ deploy 

и не кодированный версия:

https://mycompany.atlassian.net:443/confluence/rest/api/content/search?os_authType=basic&cql=type=page%20and%20space%20in%20(DEV,OPS)%20and%20title%20~%20deploy 

Они оба разрешения в щ:

{ 
    "statusCode": 400, 
    "data": { 
    "authorized": false, 
    "valid": true, 
    "errors": [], 
    "successful": false 
    }, 
    "message": "Could not parse cql : type=page%20and%20space%20in(DEV,OPS)%20and%20title~deploy" 
} 

На основе documentation я не вижу никакого упоминания о необходимости использовать + я только смог gleen это на основе дискуссии, последовавшей в question on Atlassian Answers.

Плюсы в порядке, но мне нужно использовать нечеткий поиск искать несколько терминов, так что такие вещи, как:

title+~+deploy+my+app 

будет приводить:

"message": "Could not parse cql : type=page%20and%20space%20in(DEV,OPS)%20and%20title~deploy my app" 

и:

title+~+"deploy+my+app" 

В результате:

"message": "Could not parse cql : type=page%20and%20space%20in(DEV,OPS)%20and%20title~%22deploy my app%22" 

Есть ли способ поиска многословной строки для этого облачного приложения?

+0

Вы пытались использовать AND или OR в запросе? 'title + ~ +" развернуть ИЛИ мое приложение ИЛИ " – ppasler

+0

@ppasier спасибо, хорошая мысль. Тот же результат, потому что кавычки и пробелы нуждаются в кодировании. –

ответ

0

Да, я тоже испытал это, и его довольно бесит. Кажется, что это не кодирование.

Моим обходным путем было написать свою собственную функцию urlencode. Если есть лучший способ сделать это, я хотел бы услышать:

function urlencode() { 
    local convert=$(convertFromAscii "$1") 
    echo ${convert} | sed "s/'/%27/g" | sed "s/\\\/%5C/g" 
} 

function convertFromAscii() { 
    local input=$1 
    local length="${#input}" 
    for ((i = 0; i < length; i++)); do 
     local c="${input:i:1}" 
     case ${c} in 
      [a-zA-Z0-9.~_-+\']) printf "$c" ;; 
      '-') printf "-" ;; 
      ' ') printf "%%20" ;; 
      '!') printf "%%21" ;; 
      '"') printf "%%22" ;; 
      '#') printf "%%23" ;; 
      '$') printf "%%24" ;; 
      '%') printf "%%25" ;; 
      '&') printf "%%26" ;; 
      '(') printf "%%28" ;; 
      ')') printf "%%29" ;; 
      '*') printf "%%2A" ;; 
      '+') printf "%%2B" ;; 
      ',') printf "%%2C" ;; 
      '<') printf "%%3C" ;; 
      '=') printf "%%3D" ;; 
      '>') printf "%%3E" ;; 
      '?') printf "%%3F" ;; 
      '[') printf "%%5B" ;; 
      ']') printf "%%5D" ;; 
     esac 
    done 
} 

вызов это так:

urlencode "${JIRA_FILTER_TEXT}"