es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

HttpResponse de Apache al enviar caracteres inusuales en el cuerpo (verbo POST)

Tengo algo como esto:

(Usando: org.apache.http.HttpResponse)

String jsondata = "{'issuerName': 'Sarl.'}";

try {
  httpPost.setHeader(getAuthorizationHeader(LOGIN_KEY));
  StringEntity jsonparam = null;
  jsonparam = new StringEntity(jsondata);
  jsonparam.setChunked(true);
  httpPost.addHeader("content-type", "application/json;charset=UTF-8");

  httpPost.setEntity(jsonparam);
  response = httpClient.execute(httpPost);

  if (response.getStatusLine().getStatusCode() == 200) {
  // algún código 

Todo está bien en este caso, con la carga útil Sarl.
PERO, si reemplazo:

String jsondata = "{'issuerName': 'Sarl.'}";

por

String jsondata = "{'issuerName': 'Sàrl.'}";

la serialización parece no estar correcta, ya que la API remota nunca responde con 200 (funciona bien con Postman, con la misma carga útil).

¿Alguien tiene alguna idea?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la codificación de caracteres en el segundo ejemplo, donde la carga útil incluye el carácter especial “à”. Esto podría estar causando que la serialización sea incorrecta y como resultado la API remota no responda con un código de estado 200.

    Una posible solución podría ser asegurarse de que la codificación de caracteres se maneje correctamente en el código. Esto se puede hacer estableciendo la codificación de caracteres correspondiente en el constructor StringEntity y también especificándola en el encabezado “content-type”. Por ejemplo:

    String jsondata = "{\"issuerName\": \"Sàrl.\"}";
    
    try {
        httpPost.setHeader(getAuthorizationHeader(LOGIN_KEY));
        StringEntity jsonparam = new StringEntity(jsondata, StandardCharsets.UTF_8);
        jsonparam.setChunked(true);
        httpPost.addHeader("content-type", "application/json;charset=UTF-8");
    
        httpPost.setEntity(jsonparam);
        response = httpClient.execute(httpPost);
    
        if (response.getStatusLine().getStatusCode() == 200) {
            // algún código
        }
    } catch (Exception e) {
        // manejar excepción
    }
    

    Al especificar la codificación UTF-8 tanto en el constructor de StringEntity como en el encabezado “content-type”, cualquier carácter especial debería estar correctamente codificado y la serialización debería ser correcta.

Comments are closed.