Execute ondulação de Java com processBuilder – JAVA, JSON, Curl, ProcessBuilder, Django-Rest-Framework

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".

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *