将 Curl 转换为 POST api for java
Converting Curl to POST api for java
我想post一些数据休息一下api。
API documentation(见第 38 页)要求以下内容:
curl -u "USERNAME:PASSWORD" -H "Content-type: text/xml" -X "POST"
--data-binary @-
"https://qualysapi.qualys.com/qps/rest/3.0/create/was/webapp/" <
file.xml
Note: “file.xml” contains the request POST data.
Request POST data:
<ServiceRequest>
<data>
<WebApp>
<name><![CDATA[My Web Application]]></name>
<url><![CDATA[http://mywebapp.com]]></url>
</WebApp>
</data>
</ServiceRequest>
我已使用 curl
.
确认调用在命令行上有效
然后我开始在Java
写一个小应用,发现UniRest。
这就是问题所在。我不知道如何将 curl 请求转换为 Unirest。
到目前为止我有这么多:
Unirest.post("http://apiurl).basicAuth("user","pass").field(name, file).asBinary();
后半段
.field(name, file).asBinary();
对我来说没有意义。给文件命名背后的意图是什么。不是应该从文件中检索数据吗?
此外,我想避免将数据写入文件。如何使用 UniRest 创建相同的 xml
。
如果不是xml
,我可以用JSON
做同样的事情吗?上面附带的 API(附录 C)也接受 JSON
。但是,如何使用 Unirest
api
的构建器模式嵌套字段
根据 UniRest 文档,您似乎可以将任何字节数组写入请求中的字段。您只需将字符串编码为字节数组即可。
Unirest.post("http://apiroot")
.field(name, xmlString.getBytes(StandardCharsets.UTF_8))
.asBinary();
或者,您可以使用任何 InputStream
、
Unirest.post("http://apiroot")
.field(name, new CharSequenceInputStream(xmlString, StandardCharsets.UTF_8))
.asBinary();
通常数据是请求的主体(而不是字段)。如果您确实希望将数据作为请求主体而不是表单字段发送,您应该使用 body(String body)
方法而不是 field(String name, Object object)
方法,例如:
String data = "<ServiceRequest>... etc...</ServiceRequest>";
Unirest.post("http://apiroot")
.body(xmlString)
.asBinary();
我想post一些数据休息一下api。
API documentation(见第 38 页)要求以下内容:
curl -u "USERNAME:PASSWORD" -H "Content-type: text/xml" -X "POST"
--data-binary @-
"https://qualysapi.qualys.com/qps/rest/3.0/create/was/webapp/" <
file.xml
Note: “file.xml” contains the request POST data.
Request POST data:
<ServiceRequest>
<data>
<WebApp>
<name><![CDATA[My Web Application]]></name>
<url><![CDATA[http://mywebapp.com]]></url>
</WebApp>
</data>
</ServiceRequest>
我已使用 curl
.
然后我开始在Java
写一个小应用,发现UniRest。
这就是问题所在。我不知道如何将 curl 请求转换为 Unirest。
到目前为止我有这么多:
Unirest.post("http://apiurl).basicAuth("user","pass").field(name, file).asBinary();
后半段
.field(name, file).asBinary();
对我来说没有意义。给文件命名背后的意图是什么。不是应该从文件中检索数据吗?
此外,我想避免将数据写入文件。如何使用 UniRest 创建相同的 xml
。
如果不是xml
,我可以用JSON
做同样的事情吗?上面附带的 API(附录 C)也接受 JSON
。但是,如何使用 Unirest
api
根据 UniRest 文档,您似乎可以将任何字节数组写入请求中的字段。您只需将字符串编码为字节数组即可。
Unirest.post("http://apiroot")
.field(name, xmlString.getBytes(StandardCharsets.UTF_8))
.asBinary();
或者,您可以使用任何 InputStream
、
Unirest.post("http://apiroot")
.field(name, new CharSequenceInputStream(xmlString, StandardCharsets.UTF_8))
.asBinary();
通常数据是请求的主体(而不是字段)。如果您确实希望将数据作为请求主体而不是表单字段发送,您应该使用 body(String body)
方法而不是 field(String name, Object object)
方法,例如:
String data = "<ServiceRequest>... etc...</ServiceRequest>";
Unirest.post("http://apiroot")
.body(xmlString)
.asBinary();