Sto scrivendo un programma di test in Java per provare Miconexion in un API riposante a Django (DjangorestFramework to Sii preciso). Una delle opzioni è provare una delle API con il ricciolo. L’esecuzione del comando Curl dalla shell funziona bene: ad esempio:
curl --show-error --request GET --header "Accept: application/json" --user "user:pwd" http://127.0.0.1:8000/api/v1/
restituisce molto bene gli URL dell’API e il testo della Guida in formato JSON.
Ora, quando provo a invocare lo stesso da Java, usando ProcessBuilder, ottengo questa risposta:
{"detail": "You do not have permission to access this resource. You may need to login or otherwise authenticate the request."}
Il codice Java I’m L’utilizzo è:
Perché prendo anche la sequenza di errore da:
InputStream errorStream= shell.getErrorStream();InputStream shellIn = shell.getInputStream();
So che avvia il comando Curl, perché effettuare un errore in una delle opzioni mostra il testo della Guida di Curl.
Non sono sicuro di qual è la differenza tra invocandolo, sicuro che sia lo stesso comando .
A proposito, “GetapaiRooRmentLstring ()” restituisce l’URL corretto: http://127.0.0.1:8000/api/v1/
Risposte
5 per la risposta № 1
Ogni stringa che passa a ProcessBuilder
Il costruttore rappresenta un argomento, quindi non hai bisogno delle quotazioni che avresti Cosa usare con il guscio. Prova quanto segue:
ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET","--header","Accept: application/json", "--user", userName + ":" + password, getApiRootUrlString());
Se si utilizzano quotazioni, diventano parte del valore che viene trasmesso nel processo, quindi stavo cercando di autenticare con un nome utente di "user
e una password di pwd"
.