当前位置: 首页 > 知识库问答 >
问题:

如何在groovy中提出补丁超文本传输协议请求

公冶同
2023-03-14

为什么它不起作用?

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}");

返回java.net中的错误=。ProtocolException:无效的HTTP方法:修补程序

共有1个答案

林富
2023-03-14

旧的java HttpUrlConnection。setRequestMethod()不支持修补程序方法:

https://docs.oracle.com/javase/10/docs/api/java/net/HttpURLConnection.html#setRequestMethod(java.lang.String)

public void setRequestMethod​(String method) throws ProtocolException

Set the method for the URL request, one of:
    GET
    POST
    HEAD
    OPTIONS
    PUT
    DELETE
    TRACE 

但是有一个技巧-在groovy中,您可以设置受保护的属性值,并且有一个属性方法

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")
 类似资料:
  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 我有专有的基于http的API要从JMeter测试。不幸的是,API的一些endpoint希望http DELETE方法带有请求体(我知道它的API设计有问题,使用DELETE with request body,但我无法更改该API,需要对其进行测试)。 如何从JMeter测试它?似乎标准的HttpRequest采样器在没有任何警告的情况下默默忽略了我的身体有效载荷。(当我在《邮递员》中尝试它时

  • 我想知道你对这个概念的看法/意见。如果有替代方案?这是否可行/有益? 据我所知,对于每个http请求,服务器都会执行一些操作并返回http响应。 现在考虑任何场景,我们希望对服务器上运行的进程有更多的控制。 情景1:http请求发送- 在这里,资源被浪费了。 情况2:http请求发送- 在这里,客户端不知道服务器中运行的进程的状态。客户端必须等待,直到它获得超文本传输协议响应。 我的想法是:在初始

  • 我用Ktor构建了一个Web服务器,并想缓存API方法结果。但是我不知道如何从下面call.response.代码中获取响应正文 如果我无法获得响应体,还有其他解决方案可以在Ktor中缓存API方法的结果吗?

  • 我有以下伪代码 我想要的是,我循环遍历一个对象数组,每个对象都获得相关的用户和产品,然后订阅用户和产品。我怎么能那样做?

  • 我用Go编写了一个简单的服务器: 以及一个用Python编写的用于测试的简单客户端。以下是代码: 每次客户端访问服务器时,服务器都会产生这个错误: 我知道如何在Go中处理JSON Post请求 Python版本==3.4 Go版本==1.7 先谢谢你。