2016-08-19 33 views
0

残りのAPIにいくつかのデータを投稿したいと思います。Java用のCurlから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が見つかりました。

問題が発生する箇所です。私はカール要求をUnirestに変換する方法を知らない。

私はずっと今のところ、これを持っている:

Unirest.post("http://apiurl).basicAuth("user","pass").field(name, file).asBinary(); 

後半

.field(name, file).asBinary(); 

doesntのは、私には意味をなさない。ファイルに名前を付ける目的は何ですか?ファイルからデータを取得することは考えていませんか?

さらに、データをファイルに書き込まないようにしたいと考えています。 UniRestで同じxmlを作成するにはどうすればいいですか?

xmlでない場合は、JSONと同じことができますか?上記API(付録C)には、JSONも使用できます。しかし、どのようにフィールドをネストすることができますか?Unirest api

答えて

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

通常のデータは(ないフィールドとして)しかし要求の本体です。あなたが要求の本文ではなく、フォームフィールドとしてデータを送信したい場合は、例えば、代わりにfield(String name, Object object)方法body(String body)メソッドを使用する必要があります。

String data = "<ServiceRequest>... etc...</ServiceRequest>"; Unirest.post("http://apiroot") .body(xmlString) .asBinary();

+0

それは、その後 'ボディ(XML文字列だろう) 'コマンドラインの元の' curl'にマッチさせる? – Cripto

+0

イップ、私はそれがうまくいくと思います。私はあなたのサーバーAPIに対してテストケースを実行することができないので、私は確信することはできません。 – RudolphEst

+0

今日は後で確認し、正しい場合は正しいとマークします。上記の 'body'メソッドと' xml'データを使ってあなたの答えを編集してください。 – Cripto