从Java的的ProcessBuilder执行卷曲(Execute curl from java w

2019-09-19 08:56发布

我用Java编写的测试porgram来测试我的连接到问题的REST API在Django(djangorestframework是精确)。 其中一个选项是测试的API与卷曲的。 从运行正常工作外壳curl命令:例如:

curl --show-error --request GET --header 'Accept: application/json' --user "user:pwd" http://127.0.0.1:8000/api/v1/

这将返回很好的JSON格式的API根URL和帮助文件。

现在,当我尝试调用从Java一样,采用的ProcessBuilder,我得到这样的回答:

{"detail": "You do not have permission to access this resource. You may need to login or otherwise authenticate the request."}

我使用的Java代码:

ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET",
                    "--header","'Accept: application/json'", "--user","\"" + userName + ":" + password + "\"", getApiRootUrlString());
final Process shell = p.start();

因为我也赶错误流:

InputStream errorStream= shell.getErrorStream();
InputStream shellIn = shell.getInputStream();

我知道他开始curl命令,因为在制作的一个选项是错误显示卷曲帮助文本。

我没有放弃知道什么是调用它,肯定它的相同的命令之间的差异。

顺便说一下,“getApiRootUrlString()返回正确的网址: http://127.0.0.1:8000/api/v1/

Answer 1:

每次传递给字符串ProcessBuilder构造代表一个参数,所以你不需要,你将不得不与外壳使用引号。 尝试以下方法:

ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET",
                "--header","Accept: application/json", "--user", userName + ":" + password, getApiRootUrlString());

如果使用引号然后他们成为传递给此过程中的价值的一部分,所以你想用的用户名进行身份验证"user和密码pwd"



文章来源: Execute curl from java with processbuilder