点击Java Web服务:curl或URLConnection

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

http://localhost:8080/my-server/

文档建议使用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"

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

我在SO上发现了this问题,答案者建议使用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:密码
> –data-binary
> – @ absolute / path / …

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

解决方法:

我相信使用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
}
上一篇:基于 Conan 的 C/C++ 持续交付流水线


下一篇:Vivado如何计算关键路径的建立时间裕量?(实践篇)