如何在 groovy 中创建补丁 http 请求
How to make patch http request in groovy
为什么它不起作用?
def post = new URL(url).openConnection();
post.setRequestMethod("PATCH");
post.setDoOutput(true);
post.setRequestProperty("Content-Type", "application/json");
post.getOutputStream().write(body.getBytes("UTF-8"));
def postRC = post.getResponseCode();
logger.info("Status code = ${postRC}");
returns错误=java.net.ProtocolException: Invalid HTTP method: PATCH
old java HttpUrlConnection.setRequestMethod()不支持patch方法:
public void setRequestMethod(String method) throws ProtocolException
Set the method for the URL request, one of:
GET
POST
HEAD
OPTIONS
PUT
DELETE
TRACE
但是有一个技巧 - 在 groovy 中你可以设置受保护的 属性 值并且有一个 属性 method
https://docs.oracle.com/javase/10/docs/api/java/net/HttpURLConnection.html#method
所以你可以更改代码:
def body = [test:123]
def post = new URL("http://httpbin.org/patch").openConnection();
post.method ="PATCH";
post.setDoOutput(true);
post.setRequestProperty("Content-Type", "application/json");
post.getOutputStream().withWriter("UTF-8"){ it << new groovy.json.JsonBuilder(body) }
def postRC = post.getResponseCode();
println "Status code = ${postRC}"
println post.getInputStream().getText("UTF-8")
为什么它不起作用?
def post = new URL(url).openConnection();
post.setRequestMethod("PATCH");
post.setDoOutput(true);
post.setRequestProperty("Content-Type", "application/json");
post.getOutputStream().write(body.getBytes("UTF-8"));
def postRC = post.getResponseCode();
logger.info("Status code = ${postRC}");
returns错误=java.net.ProtocolException: Invalid HTTP method: PATCH
old java HttpUrlConnection.setRequestMethod()不支持patch方法:
public void setRequestMethod(String method) throws ProtocolException
Set the method for the URL request, one of:
GET
POST
HEAD
OPTIONS
PUT
DELETE
TRACE
但是有一个技巧 - 在 groovy 中你可以设置受保护的 属性 值并且有一个 属性 method
https://docs.oracle.com/javase/10/docs/api/java/net/HttpURLConnection.html#method
所以你可以更改代码:
def body = [test:123]
def post = new URL("http://httpbin.org/patch").openConnection();
post.method ="PATCH";
post.setDoOutput(true);
post.setRequestProperty("Content-Type", "application/json");
post.getOutputStream().withWriter("UTF-8"){ it << new groovy.json.JsonBuilder(body) }
def postRC = post.getResponseCode();
println "Status code = ${postRC}"
println post.getInputStream().getText("UTF-8")