我正在用java编写一个测试porgram来测试我与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/