2016-05-28 5 views
0

Kürzlich möchte ich eine Suchschnittstelle verwenden. Aber ich bin verwirrt durch die Anfrage Körper. zu Referenz Nach, wenn Sie in ihre Website suchen, dann können Sie wie folgt tun:Veröffentlichen Sie eine Anfrage in Java

curl -d "keyword=android" http://gankio.herokuapp.com/search 

So, wie eine Anfrage in Java zu schreiben, anstatt curl?

Ich habe versucht, okhttp zu verwenden.

Thread thread = new Thread(new Runnable() { 
       @Override 
       public void run() { 
        OkHttpClient client = new OkHttpClient(); 
        String json = "keyword=android"; 
        RequestBody body = RequestBody.create(JSON,json); 
      Request request = new Request.Builder() 
        .url("http://gankio.herokuapp.com/search") 
        .post(body) 
        .build(); 
      try { 
       Response response = client.newCall(request).execute(); 
       Log.d("TAG",response.body().string()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start();` 
+0

Ich würde nach einer Bibliothek suchen, um Ihr Leben zu vereinfachen. Idk wenn etwas gut, aber https://github.com/kevinsawicki/http-request#perform-a-post-request-with-some-data-and-get-the-status-of-the-response ist 1 Zeile von Code. – zapl

+0

Funktioniert Locke und Ihr Code führt zu einem http 400-Fehler? 'curl -d' sendet Daten als' application/x-www-form-urlencoded', nicht als json. http://stackoverflow.com/questions/24233632/how-to-add-parameters-to-api-http-post-using-okhttp-library-in-android wäre der Weg, um das mit OkHttp zu tun. – zapl

+0

Vielen Dank. Ich löse es. – CoXier

Antwort

2

ich diese Frage gelöst haben.

Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      OkHttpClient client = new OkHttpClient(); 
      RequestBody requestBody = new FormBody.Builder().add("keyword", "android").build(); 
      Request request = new Request.Builder() 
        .url("http://gankio.herokuapp.com/search") 
        .post(requestBody) 
        .build(); 
      try { 
       Response response = client.newCall(request).execute(); 
       Log.d("TAG", response.body().string()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start(); 
0

können Sie versuchen, HttpURLConnection von java.net mit Dieser link wird HttpURLConnection Verbindungsprozess erklären.

0

Sie möchten den Service anrufen Post-Anforderung und Form param verwenden Sie bitte den folgenden Code verwenden:

OkHttpClient client = new OkHttpClient(); 

    Request request = new Request.Builder() 
     .url("http://gankio.herokuapp.com/search?keyword=android") 
     .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), "")) 
     .build(); 

    try { 
     Response response = client.newCall(request).execute(); 
     System.out.println(response.toString()); 
     System.out.println(response.body().string()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Response response = client.newCall(request).execute(); 

Der Service, den Sie anrufen möchten, brauchen keinen Körper, es braucht nur passieren Formparameter (Stichwort) mit dem Wert (android), aber Sie versuchen, den Parameter mit dem Körper zu passieren, und das ist Ihr Fehler

+0

Zunächst einmal danke. request.post (null) 'ist verboten. – CoXier

+0

Ja ich benutze die neueste Version.Sie haben meinen Fehler gezeigt. Vielen Dank – CoXier

+0

ok, keine Abstimmung !! –

Verwandte Themen