Executar Curl de Java con processbuilder – Java, JSON, CURL, PROCESSBUILDER, DJANGO-REST-Framework

Estou escribindo un programa de proba en Java para probar miconexión a unha API de Restfull en Django (Djangorestframework para ser preciso). Unha das opcións é probar unha das API con Curl. Executar o comando de curl desde o shell funciona ben: por exemplo:

curl --show-error --request GET --header "Accept: application/json" --user "user:pwd" http://127.0.0.1:8000/api/v1/

Isto devolve moi ben as URL da API e o texto de axuda en formato JSON.

Agora, cando intento invocar o mesmo de Java, usando processbuilder, recibo 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 que son Usando é:

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

porque tamén tomo a secuencia de erro por:

InputStream errorStream= shell.getErrorStream();InputStream shellIn = shell.getInputStream();

Sei que comeza o comando de curl, porque facer un erro nunha das opcións amosa o texto de axuda de curl.

Non estou seguro de que é a diferenza entre a invocación, é certo que é o mesmo comando .

Por certo, “Getapairooturnlstring ()” devolve a URL correcta: http://127.0.0.1:8000/api/v1/

respostas

5 para a resposta № 1

Cada cadea que pasa ao ProcessBuilder O constructor representa un argumento, polo que non necesita as citas que tería Que usar coa casca. Probe o seguinte:

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

Se usa presupostos, pasan a formar parte do valor que se transmite ao proceso, polo que estaba tentando autenticar cun nome de usuario de "user e un contrasinal de pwd".

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *