使用processbuilder从java执行curl

使用processbuilder从java执行curl,java,json,curl,processbuilder,django-rest-framework,Java,Json,Curl,Processbuilder,Django Rest Framework,我正在用java编写一个测试程序包,以测试我与django(确切地说是djangorestframework)中RESTFullAPI的连接。 其中一个选项是使用curl测试一个api。 从shell运行curl命令,效果良好: e、 g: 这将以json格式很好地返回api根URL和帮助文本 现在,当我尝试使用ProcessBuilder从java调用相同的函数时,我得到了以下答案: {"detail": "You do not have permission to access this r

我正在用java编写一个测试程序包,以测试我与django(确切地说是djangorestframework)中RESTFullAPI的连接。 其中一个选项是使用curl测试一个api。 从shell运行curl命令,效果良好: e、 g:

这将以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
构造函数的每个字符串代表一个参数,因此不需要在shell中使用引号。请尝试以下操作:

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

如果您使用引号,那么它们将成为传递给流程的值的一部分,因此您尝试使用用户名
“user
和密码
pwd”

进行身份验证,当然是愚蠢的我!塔克斯!我刚刚测试过,事实上。。。。(在测试之前我就知道你是对的)
ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET",
                "--header","Accept: application/json", "--user", userName + ":" + password, getApiRootUrlString());