Eu estou escrevendo um programa de teste em Java para tentar miconexion a uma API RESTFULL em Django (DjangorestFramework para seja preciso). Uma das opções é tentar uma das API com Curl. Executando o comando CURL a partir do shell funciona bem: por exemplo:
curl --show-error --request GET --header "Accept: application/json" --user "user:pwd" http://127.0.0.1:8000/api/v1/
Isso retorna muito bem os URLs da API e o texto da Ajuda no formato JSON.
Agora, quando tento invocar o mesmo do Java, usando o ProcessBuilder, recebo esta resposta:
{"detail": "You do not have permission to access this resource. You may need to login or otherwise authenticate the request."}
O código Java eu sou Usando é:
ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET","--header",""Accept: application/json"", "--user",""" + userName + ":" + password + """, getApiRootUrlString());final Process shell = p.start();
Porque eu também assumo a sequência de erro por:
InputStream errorStream= shell.getErrorStream();InputStream shellIn = shell.getInputStream();
Eu sei que começa o comando curl, porque cometer um erro em uma das opções mostra o texto da ajuda de curvas.
Não tenho certeza Qual é a diferença entre invocá-lo, com certeza é o mesmo comando .
By the way, “GetAtaooTurnSring ()” retorna o URL correto: http://127.0.0.1:8000/api/v1/
respostas
5 para a resposta № 1
Cada string que passa para o ProcessBuilder
O construtor representa um argumento, então você não precisa das cotações que você teria O que usar com o shell. Tente o seguinte:
ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET","--header","Accept: application/json", "--user", userName + ":" + password, getApiRootUrlString());
Se você usar citações, eles se tornam parte do valor que é passado para o processo, então eu estava tentando autenticar com um nome de usuário de "user
e uma senha do pwd"
.