www urlencoded form example application java

java - example - application/x-www-form-urlencoded json



Cómo enviar solicitud de publicación con x-www-form-urlencoded body (2)

Al configurar application/x-www-form-urlencoded como tipo de contenido, los datos enviados deben ser como este formato.

String urlParameters = "param1=data1&param2=data2&param3=data3";

Enviar parte ahora es bastante sencillo.

byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 ); int postDataLength = postData.length; String request = "<Url here>"; URL url = new URL( request ); HttpURLConnection conn= (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setInstanceFollowRedirects(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("charset", "utf-8"); conn.setRequestProperty("Content-Length", Integer.toString(postDataLength )); conn.setUseCaches(false); try(DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) { wr.write( postData ); }

O puede crear un método genérico para crear un patrón de valores clave que se requiere para application/x-www-form-urlencoded .

private String getDataString(HashMap<String, String> params) throws UnsupportedEncodingException{ StringBuilder result = new StringBuilder(); boolean first = true; for(Map.Entry<String, String> entry : params.entrySet()){ if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); } return result.toString(); }

Cómo en java, puedo enviar una solicitud con el x-www-form-urlencoded header . No entiendo cómo enviar un cuerpo con un valor clave, como en la captura de pantalla anterior.

He intentado este código:

String urlParameters = cafedra_name+ data_to_send; URL url; HttpURLConnection connection = null; try { //Create connection url = new URL(targetURL); connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); connection.setRequestProperty("Content-Language", "en-US"); connection.setUseCaches (false); connection.setDoInput(true); connection.setDoOutput(true); //Send request DataOutputStream wr = new DataOutputStream ( connection.getOutputStream ()); wr.writeBytes (urlParameters); wr.flush (); wr.close ();

Pero en la respuesta, no recibo los datos correctos.


Para HttpEntity , la siguiente respuesta funciona

HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>(); map.add("email", "[email protected]"); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers); ResponseEntity<String> response = restTemplate.postForEntity( url, request , String.class );

Para referencia: ¿Cómo POSTAR datos de formulario con Spring RestTemplate?