我的代码:
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7')
@Grab('oauth.signpost:signpost-core:1.2.1.2')
@Grab('oauth.signpost:signpost-commonshttp4:1.2.1.2')
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.*
def gerrit = new RESTClient('http://localhost:8080/gerrit')
gerrit.auth.basic "gerrit", "password123"
gerrit.get( path: 'changes/1234/reviewers' )
根据https://gerrit-review.googlesource.com/Documentation/rest-api.html#authentication
“为了防止跨站点脚本包含(XSSI)攻击, JSON响应正文以一个魔术前缀行开始,必须在将其余响应主体提供给JSON解析之前将其去除 r :“
)]}'
[ ... valid JSON ... ]
我的错误:
WARNING: Error parsing 'application/json; charset=UTF-8' response
groovy.json.JsonException: Unable to determine the current character, it is not a string, number, array, or object
The current character read is ')' with an int value of 41
Unable to determine the current character, it is not a string, number, array, or object
line number 1
index number 0
)]}'
答案 0 :(得分:1)
抱歉,我对Groovy不是很熟悉,但是除非你想修改源代码并推出你自己的版本,否则无法从Gerrit中删除这个前缀。
解决方案是使用不同的Groovy API来获取原始数据,去掉前5个字符,然后将其提供给Groovy JSON解析器。再说一遍,很抱歉,但我无法帮助解决Groovy API的问题。
正如文档所提到的,这些角色有时很烦人,但Gerrit的一个重要安全特性是防止任何XSS攻击。
答案 1 :(得分:0)
我找到了答案。
# controllers/contenders_controller.rb
def index
@post = Post.find_by(id: params[:post_id] )
@contenders = @post.contenders
end