por - request json java
POST HTTP utilizando JSON en Java (8)
Me gustaría hacer un HTTP POST simple usando JSON en Java.
Digamos que la URL es www.site.com
y toma el valor {"name":"myname","age":"20"}
etiquetado como ''details''
por ejemplo.
¿Cómo voy a crear la sintaxis para el POST?
Tampoco puedo encontrar un método POST en JSON Javadocs.
Aquí está lo que tú necesitas hacer:
- Obtenga Apache HttpClient, esto le permitiría hacer la solicitud requerida
- Cree una solicitud de HttpPost con ella y agregue el encabezado "application / x-www-form-urlencoded"
- Cree un StringEntity que le pasará JSON
- Ejecuta la llamada
El código se parece más o menos (todavía tendrá que depurarlo y hacerlo funcionar)
//Deprecated
//HttpClient httpClient = new DefaultHttpClient();
HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead
try {
HttpPost request = new HttpPost("http://yoururl");
StringEntity params =new StringEntity("details={/"name/":/"myname/",/"age/":/"20/"} ");
request.addHeader("content-type", "application/x-www-form-urlencoded");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
//handle response here...
}catch (Exception ex) {
//handle exception here
} finally {
//Deprecated
//httpClient.getConnectionManager().shutdown();
}
Encontré esta pregunta en busca de una solución sobre cómo enviar una solicitud posterior del cliente de Java a Google Endpoints. Las respuestas anteriores, muy probablemente sean correctas, pero no funcionarán en el caso de Google Endpoints.
Solución para Google Endpoints.
- El cuerpo de la solicitud debe contener solo cadena JSON, no nombre = par de valores.
El encabezado del tipo de contenido debe establecerse en "application / json".
post("http://localhost:8888/_ah/api/langapi/v1/createLanguage", "{/"language/":/"russian/", /"description/":/"dsfsdfsdfsdfsd/"}"); public static void post(String url, String param ) throws Exception{ String charset = "UTF-8"; URLConnection connection = new URL(url).openConnection(); connection.setDoOutput(true); // Triggers POST. connection.setRequestProperty("Accept-Charset", charset); connection.setRequestProperty("Content-Type", "application/json;charset=" + charset); try (OutputStream output = connection.getOutputStream()) { output.write(param.getBytes(charset)); } InputStream response = connection.getInputStream(); }
Seguro que se puede hacer usando HttpClient también.
La respuesta de @Momo para Apache HttpClient, versión 4.3.1 o posterior. Estoy usando JSON-Java
para construir mi objeto JSON:
JSONObject json = new JSONObject();
json.put("someKey", "someValue");
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
try {
HttpPost request = new HttpPost("http://yoururl");
StringEntity params = new StringEntity(json.toString());
request.addHeader("content-type", "application/json");
request.setEntity(params);
httpClient.execute(request);
// handle response here...
} catch (Exception ex) {
// handle exception here
} finally {
httpClient.close();
}
Probablemente sea más fácil usar HttpURLConnection .
http://www.xyzws.com/Javafaq/how-to-use-httpurlconnection-post-data-to-web-server/139
Utilizará JSONObject o lo que sea para construir su JSON, pero no para manejar la red; necesita serializarlo y luego pasarlo a HttpURLConnection para POST.
Prueba este código:
HttpClient httpClient = new DefaultHttpClient();
try {
HttpPost request = new HttpPost("http://yoururl");
StringEntity params =new StringEntity("details={/"name/":/"myname/",/"age/":/"20/"} ");
request.addHeader("content-type", "application/json");
request.addHeader("Accept","application/json");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
// handle response here...
}catch (Exception ex) {
// handle exception here
} finally {
httpClient.getConnectionManager().shutdown();
}
Puede hacer uso de la biblioteca Gson para convertir sus clases de Java a objetos JSON.
Crea una clase pojo para las variables que deseas enviar como se muestra arriba Ejemplo
{"name":"myname","age":"20"}
se convierte
class pojo1
{
String name;
String age;
//generate setter and getters
}
una vez que estableces las variables en la clase pojo1 puedes enviar eso usando el siguiente código
String postUrl = "www.site.com";// put in your url
Gson gson = new Gson();
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(postUrl);
StringEntity postingString = new StringEntity(gson.toJson(pojo1));//gson.tojson() converts your pojo to json
post.setEntity(postingString);
post.setHeader("Content-type", "application/json");
HttpResponse response = httpClient.execute(post);
y estas son las importaciones
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
y para GSON
import com.google.gson.Gson;
Recomiendo http-request basado en apache http api.
HttpRequest<String> httpRequest = HttpRequestBuilder.createPost(yourUri, String.class)
.responseDeserializer(ResponseDeserializer.ignorableDeserializer()).build();
public void send(){
ResponseHandler<String> responseHandler = httpRequest.execute("details", yourJsonData);
int statusCode = responseHandler.getStatusCode();
String responseContent = responseHandler.orElse(null); // returns Content from response. If content isn''t present returns null.
}
Si desea enviar JSON
como cuerpo de solicitud, puede:
ResponseHandler<String> responseHandler = httpRequest.executeWithBody(yourJsonData);
Recomiendo encarecidamente leer la documentación antes de su uso.
protected void sendJson(final String play, final String prop) {
Thread t = new Thread() {
public void run() {
Looper.prepare(); //For Preparing Message Pool for the childThread
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 1000); //Timeout Limit
HttpResponse response;
JSONObject json = new JSONObject();
try {
HttpPost post = new HttpPost("http://192.168.0.44:80");
json.put("play", play);
json.put("Properties", prop);
StringEntity se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);
response = client.execute(post);
/*Checking response */
if (response != null) {
InputStream in = response.getEntity().getContent(); //Get the data in the entity
}
} catch (Exception e) {
e.printStackTrace();
showMessage("Error", "Cannot Estabilish Connection");
}
Looper.loop(); //Loop in the message queue
}
};
t.start();
}