Как кодировать UTF-8 CloseableHttpClient запрос - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть простой POST:

String url = "https://mysite";
try (CloseableHttpClient httpClient = HttpClients.custom().build()) {   
   URIBuilder uriBuilder = new URIBuilder(url);
   HttpPost request = new HttpPost();
   List<NameValuePair> nameValuePairs = new ArrayList<>(params);
   request.setEntity(new UrlEncodedFormEntity(nameValuePairs, StandardCharsets.UTF_8.name()));
   String encodedAuthorization = URLEncoder.encode(data, StandardCharsets.UTF_8.name());

    request.addHeader("Authorization", encodedAuthorization);
   try (CloseableHttpResponse response = httpClient.execute(request)) { 

Я должен поддерживать кодировку UTF-8 и кодирование UrlEncodedFormEntity недостаточно, но неясно, что необходимо сделать, после нескольких доступных вариантов

Использование uriBuilder.setCharset:

HttpPost request = new HttpPost(uriBuilder.setCharset(StandardCharsets.UTF_8)).build());

Использование параметра http.protocol.content-charset:

HttpPost request = new HttpPost(uriBuilder.setParameter("http.protocol.content-charset", "UTF-8").build());

Или просто добавив Content-Type "` header :

request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

Или используйте request.getParams () :

request.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
request.getParams().setParameter("http.protocol.content-charset", "UTF-8");

Или другое очевидное решение, которое я упустил?

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Для правильного кодирования я перехожу к использованию параметров в List<NameValuePair> более URIBuilder

и затем кодировать, используя

URLEncodedUtils.format(nameValuePairs, StandardCharsets.UTF_8.name());
0 голосов
/ 24 апреля 2019
// Method to encode a string value using `UTF-8` encoding scheme
private static String encodeValue(String value) {
    try {
        return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
    } catch (UnsupportedEncodingException ex) {
        throw new RuntimeException(ex.getCause());
    }
}

public static void main(String[] args) {
    String baseUrl = "https://www.google.com/search?q=";

    String query = "Hellö Wörld@Java";
    String encodedQuery = encodeValue(query); // Encoding a query string

    String completeUrl = baseUrl + encodedQuery;
    System.out.println(completeUrl);
}

}

выход

https://www.google.com/search?q=Hell%C3%B6+W%C3%B6rld%40Java

Я думаю, что это может быть решением.

Вы ссылаетесь выше: https://www.urlencoder.io/java/

...