2017-12-01 2 views
0

Ich bin derzeit versucht, den Java-äquivalent zu diesem curl Befehl, um herauszufinden:Java gleichwertig kräuseln Befehl

curl -X POST -u username:password -H "X-Atlassian-Token: no-check" http://example.com/rest/api/1.0/projects/STASH/avatar.png -F [email protected] 

Jede Hilfe würde geschätzt.

Bis jetzt hatte ich Erfolg mit der Apache HTTP-Bibliothek. Unten ist ein Beispiel für eine POST-Anfrage, die ich erfolgreich verwendet habe. Allerdings ist in diesem Beispiel die äquivalent diesen curl Befehls:

curl -X POST -u username:password -H "Content-type: application/json" --data '{\"name\":\"projectName\", \"key\":\"KEY\", \"description\":\"good?\"}' "http://localhost:7990/rest/api/1.0/projects" 

und der Java-Äquivalent:

// initialize connection 
CloseableHttpClient client = HttpClients.createDefault(); 
HttpPost post = new HttpPost("http://localhost:7990/rest/api/1.0/projects") 
try 
{ 
    // create a request using the input 
    StringEntity request = new StringEntity("{\"name\":\"projectName\", \"key\":\"KEY\", \"description\":\"good?\"}",ContentType.APPLICATION_JSON); 
    post.setEntity(request); 
    // add credentials to the header in order to get authorization 
    String credentials = username + ":" + password 
    byte[] encodedCredentials = Base64.encodeBase64(credentials.getBytes("UTF-8")); 
    String header = "Basic " + new String(encodedCredentials); 
    post.addHeader("Authorization",header); 
    // execute the request using the POST method 
    client.execute(post); 
} 
catch(Exception e) 
{ 
    // nada 
} 
finally 
{ 
    // close the connection 
    post.releaseConnection(); 
} 

Dies ist, was ich habe kommen mit dem curl Befehl zum Nachahmen zuerst genannten I:

Ich denke, es ist nur der Datei-Upload-Teil, der mich stolpert. Ich weiß, dass die ursprüngliche Curl-Anfrage funktioniert, ich habe sie erfolgreich in git bash ausgeführt.

Bei der Suche nach dem richtigen Weg zum Hochladen von Dateien bin ich auf Beispiele gestoßen, die verschiedene Versionen von mehrteiligen Daten verwenden, wie zum Beispiel den MultipartEntityBuilder oder MultipartRequestEntity. Aber bis jetzt hatte ich keinen Erfolg mit ihnen (Das heißt nicht, dass sie falsch lagen, ich weiß einfach nicht was ich mache).

Antwort

0

Sie können von java.net.URL und/oder java.net.URLConnection.

URL url = new URL("http://stackoverflow.com"); 

try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) { 
    for (String line; (line = reader.readLine()) != null;) { 
     System.out.println(line); 
    } 
} 

Siehe auch die einfache Anleitung von Oracle zum Thema machen. Es ist jedoch ein bisschen ausführlich. Um weniger ausführlichen Code zu erhalten, sollten Sie stattdessen Apache HttpClient in Betracht ziehen.

See