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