插件方面以及HTTPBuilder方面的文档似乎都缺乏.我试图通过put方法提交一些json,但它一直告诉我put()不喜欢我正在喂它的地图.
有没有人使用Grails REST Client插件有一个PUT的例子?这是我尝试过的:
withHttp(uri: "http://foo/doo/roo") {
def bodyContent = [
pano: jsonText
]
def json = put(body: bodyContent)
if (json.stat == 'ok') {
wsr.success = true
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
No signature of method: com.wbr.pano.PanService.put() is applicable for argument types: (java.util.LinkedHashMap) values: [[body:
{
"class":"com.wbr.platform.Pano",
"errorMessage":"null",
"imageSize":0,
"id":26,
"completed":"2011-03-20 3:50:27.257",
"downloading":"2011-03-20 3:49:12.269",
"processing":"2011-03-20 3:49:42.911",
"uploading":"2011-03-20 3:50:12.107"
}
]]
Run Code Online (Sandbox Code Playgroud) 美好的一天!
我在github上生成了一个特殊的个人访问令牌.我想将一些代码搜索到私有存储库中.当我使用curl时,一切正常:
curl -H 'Authorization: token <MY_PERSONAL_TOKEN>' -H 'Accept: application/vnd.github.v3.text-match+json' https://api.github.com/search/code?q=FieldDescriptionResponseChecker+@MY_PRIVATE_REPO&sort=stars&order=desc;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用groovy HTTPBuilder时
class GithubSearchService {
private String authToken
public GithubSearchService(String authToken) {
this.authToken = authToken
}
public void search(String query) {
def http = new HTTPBuilder('https://api.github.com')
http.request( GET, TEXT) { req ->
uri.path = '/search/code'
uri.query = [ q: query]
headers.'Authorization' = "token $authToken"
headers.'Accept' = 'application/vnd.github.v3.text-match+json'
response.success = { resp, reader ->
println "Got response: ${resp.statusLine}"
println "Content-Type: ${resp.headers.'Content-Type'}"
println reader.text
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有403例外
Exception in …Run Code Online (Sandbox Code Playgroud) Java 8 | Groovy 语言 |
IDE:IntelliJ IDEA | 摇篮 3
我有 SSL 问题
代码:
import groovyx.net.http.RESTClient
def client = new RESTClient()
client.ignoreSSLIssues()
def result = client.get(uri: "https://sacvo76l6b.execute-api.ap-northeast-
1.amazonaws.com/")
Run Code Online (Sandbox Code Playgroud)
它抛出以下异常
javax.net.ssl.SSLPeerUnverifiedException:对等方未通过身份验证
在 sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431) 在 org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 在 org.apache.http.conn.ssl.SSLSocketFactory .connectSocket(SSLSocketFactory.java:572) 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) 在 org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) ) 在 org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) 在 org.apache.http。 impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1066) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1044) 在 groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515) 在 groovyx.net.http.RESTClient.get (RESTClient.java:119) 在 Test.getAuthCode_(Test.groovy:53)
虽然我正在使用ignoreSSLIssues(),但它似乎对我不起作用。
我也下载了 0.7.2 版本来验证这个问题,但它也是同样的问题
PS1:如果我使用 Postman,Uri 对我来说很好用
PS2:HttpURLConnection 库也适用于我
你有什么想法吗?非常感谢
在根据请求设置正文时,我可以使用Jackson而不是JSON-lib和Groovy的HTTPBuilder吗?
例:
client.request(method){
uri.path = path
requestContentType = JSON
body = customer
response.success = { HttpResponseDecorator resp, JSONObject returnedUser ->
customer = getMapper().readValue(returnedUser.content[0].toString(), Customer.class)
return customer
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我在处理响应时使用了Jackson,但我相信请求是使用JSON-lib.
我们最近更新了REST集成测试的依赖项,该测试使用了Groovy,HTTPBuilder,JSONAssert和Junit.当我们从HTTPBuilder 0.5.2到0.6时,我们的许多测试都失败了.
我们发现由于HTTPBuilder中的一个新"功能"提供了"对已注册内容类型的自动响应解析",响应格式发生了变化.
旧的,(0.5.2)格式,预期响应:
[
{
"name":"Portfolio_REST_Test01",
"description":"",
"referenceValueType":"Net Value",
"unitType":"SHARES",
"tags":[]
}
]
新的(0.6.2)响应格式:
[{tags=[], referenceValueType=Net Value, unitType=SHARES, description=, name=Portfolio_REST_Test01}]
Run Code Online (Sandbox Code Playgroud)
当JSONAssert尝试解析值为空字符串的命名值时,会出现问题,请参阅上面示例中的"描述".JSONAssert期望一个字符遵循等号而不是逗号,并在遇到时抛出异常.
def http = new HTTPBuilder(url)
http.auth.basic username, password
def data = new URL(url)
def response = data.getText()
def relativePaths = new XmlParser().parseText(response)
relativePaths.each {page ->
def link = page.content.@href.first()
if(link.contains(".txt")){
println link
}
}
Run Code Online (Sandbox Code Playgroud)
嗨,
当我试图运行它时,我得到一个401.它似乎在这里:
def response = data.getText()
Run Code Online (Sandbox Code Playgroud)
它实际上不再被认证(或根本没有)?在Ruby中,我会这样写:
(open(url, :http_basic_authentication => [username, password])
data = Nokogiri::XML(open(url, :http_basic_authentication => [username, password])))
Run Code Online (Sandbox Code Playgroud)
在Groovy中会是什么样子?我用httpbuilder错了吗?非常感谢提前!
更新1:
应用更改后:
def http = new HTTPBuilder(url)
http.auth.basic username, password
http.get(path: url, contentType: ContentType.TEXT) { resp, reader ->
def relativePaths = new XmlParser().parse(reader)
relativePaths.each …Run Code Online (Sandbox Code Playgroud) httpbuilder ×6
groovy ×5
json ×2
github ×1
grails ×1
jackson ×1
jsonassert ×1
oauth ×1
rest ×1