我将编写一个Java测试程序来测试我的与Django(特别是djangorestframework)的restful api的连接。其中一个选项是使用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/
Authorization:Bearer ehfh...
会怎么样? https://dev59.com/FqokpogBymzxlkE8m3wP - Shabar