gpt4 book ai didi

php - RESTeasy 使用的带有 JSON 正文的 POST - HTTP 100

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:24 24 4
gpt4 key购买 nike

我有一个非常简单的场景,我无法开始工作。我正在尝试使用 cURL 将 JSON 字符串发布到 RESTful 端点,以通过服务器上的 HTTPS 和 RESTeasy 发送请求。

我的 cURL POST 是这样配置的:

$ch = curl_init();

$content = json_encode($validJsonString);

curl_setopt($ch, CURLOPT_URL, 'https://foobar.com/test?trackingId=12345');
curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $content));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

$headers = array(
'Content-Type: application/json',
'Content-Length: ' . strlen($content)
);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec ($ch);

$httpResponseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

$json = json_decode($response);
curl_close ($ch);

return $json;

RESTeasy 接收者看起来像:

@POST
@Path("/test")
@Produces("application/json")
public String addObjectCommentAsJSON( @FormParam("json") String validJsonString,
@QueryParam("trackingId") String trackingId) {
Gson gson = new Gson();
SomeObject someObject = gson.fromJson(validJsonString, SomeObject.class);
String responseString = methodThatReturnsAJsonString(trackingId, someObject);
return responseString;
}

我遇到的这个问题是请求挂起大约 30 秒,然后返回 HTTP 100 响应。我知道 HTTP 100 意味着继续请求的其余部分,但我不明白我应该怎么做。

我试图删除 Content-Length header ,但显然我得到了 411(需要内容长度),所以这也不是一个选项。

可能是内容类型的问题?非常感谢任何帮助。

最佳答案

好的,感谢@cbuckley 和@abraham 在他们的评论中提出的建议,我得以解决这些问题。这是我需要做的:

1-> 更改 POST 正文的内容,而不是 curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $content)); 我现在有 curl_setopt( $ch, CURLOPT_POSTFIELDS,json_encode($validJsonString));

2-> 我创建了一个自定义的 @Provider,它将 JSON 字符串解析为具有相同结构的 Java POJO:

@Provider
public class SomeObjectProvider implements StringConverter<SomeObject> {

private final Gson gson = new Gson();
public SomeObject fromString(String s) {
return gson.fromJson(s, SomeObject.class);
}

public String toString(SomeObject someObject) {
return gson.toJson(SomeObject);
}
}

3-> 最后,收件人方法的结构必须稍微改变一下:

@POST
@Path("/test")
@Produces("application/json")
public String addObjectCommentAsJSON(SomeObject someObject,
@QueryParam("trackingId") String trackingId) {
String responseString = methodThatReturnsAJsonString(trackingId, someObject);
return responseString;
}

一切都顺利进行。

关于php - RESTeasy 使用的带有 JSON 正文的 POST - HTTP 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com