У меня есть простой 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");
Или другое очевидное решение, которое я упустил?