将Curl转换为java的POST api

时间:2016-08-19 20:07:07

标签: java curl unirest

我想将一些数据发布到休息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

的构建器模式嵌套字段

1 个答案:

答案 0 :(得分:1)

根据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();