点击Java Web服务:curl或URLConnection

IAm*_*aja 4 java curl web-services network-programming artifactory

我正在使用Java服务器在以下URL上公开RESTful API:

http://localhost:8080/my-server/
Run Code Online (Sandbox Code Playgroud)

文档建议curl用于提交简单PUT请求(文件上载),并强烈建议用户使用与示例中提供的完全相同的参数.所有示例都如下所示:

curl -X PUT -f -u admin:password --data-binary @/absolute/path/file/to/upload/file.ext "http://localhost:8080/my-server/file.ext"
Run Code Online (Sandbox Code Playgroud)

此服务器无法使用FTP或任何其他正常传输协议.

我在SO上找到了这个问题,答案者建议使用java.net.URL它和它的伴侣,java.net.URLConnection而不是尝试使用curl/libcurl.

我以前从未运行过curl命令,所以我问任何知道curl和Java的人,如果可以使用URL/URLConnection(或任何其他Java框架)而不是curl来解决我的特定问题.如果没有,那么我将不得不编写一个从本地命令行/终端执行curl命令的组件,然后在该组件内执行上述命令,这只是感觉丑陋/讨厌.

如果我可以在Java网络API中完成同样的事情,我宁愿这样做.

而且,如果它可以用Java做,我将如何使用URL/URLConnection的成立确切相同的命令参数,因为我提供的例子吗?特别:

  • -X
  • PUT
  • -f
  • -u admin:password
  • --data-binary
  • -@absolute/path/...

在此提前感谢您的任何见解或在正确的方向上轻推!

Tom*_*icz 6

我相信使用Java和这或多或少相当:

try {
    Credentials credentials = new UsernamePasswordCredentials("admin", "password");  //-u admin:password
    DefaultHttpClient httpClient = new DefaultHttpClient();
    httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials);
    HttpPut put = new HttpPut("http://localhost:8080/my-server/file.ext");  //-X PUT
    put.setEntity(new FileEntity(new File("/absolute/path/file/to/upload/file.ext"), "image/png"));  //@ - absolute path
    httpClient.execute(put);
} catch(Exception e) {
    //-f, fail silently
}
Run Code Online (Sandbox Code Playgroud)