2016-08-02 57 views
0

我正在使用邮递员和Javascript查询Cloud atlassian.net帐户上的Confluence API。Confluence REST API搜索 - 编码时编码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 

他们都水库在documentation我看没有提到需要使用+我只能基于以下一个question on Atlassian Answers的讨论gleen这种基于

{ 
    "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" 
} 

:ULT英寸

的长处都很好,但我需要使用模糊搜索来搜索多个术语所以像:

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 +〜+“部署或我的OR应用程序”' – 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}"