gpt4 book ai didi

java - 使用 processbuilder 从 java 执行 curl

转载 作者:搜寻专家 更新时间:2023-11-01 02:30:11 24 4
gpt4 key购买 nike

我正在用 java 编写一个测试程序来测试我与 django 中 restfull api 的连接(准确地说是 djangorestframework)。其中一个选项是使用 curl 测试 api。从 shell 运行 curl 命令它工作正常:例如:

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

这会以 json 格式很好地返回 api 根 url 和帮助文本。

现在,当我尝试使用 ProcessBuilder 从 java 调用相同的方法时,我得到了这个答案:

{"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 命令,因为在其中一个选项中出错会显示 curl 帮助文本。

我不确定调用它有什么区别,很确定这是同一个命令。

顺便说一句,'getApiRootUrlString()' 返回正确的 url:http://127.0.0.1:8000/api/v1/

最佳答案

您传递给 ProcessBuilder 的每个字符串constructor 表示一个参数,因此您不需要在 shell 中必须使用的引号。尝试以下操作:

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

如果您使用引号,那么它们将成为传递给流程的值的一部分,因此您尝试使用用户名 "user 进行身份验证密码 pwd" .

关于java - 使用 processbuilder 从 java 执行 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11442344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com