Заголовок HTTP-запроса:
Host: www.mysite.com
Content-Type: application/x-www-form-urlencoded
Cookie: bbuserid=XXX; bbpassword=YYY; bbsessionhash=ZZZ
Content-Length: 252
Тело HTTP-запроса:
message=%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC&securitytoken=XXX&do=postreply&t=483553
Работает нормально! Данные, отправленные на сервер, декодируются на другом конце, и пользователь видит исходное сообщение äöõüäöõüäöõüäöõü
.
Теперь давайте попробуем реализовать этот точный пример с помощью JSoup:
//request body
Map<String, String> datamap = new HashMap<String, String>();
datamap.put(Session.SESSION_SECURITYTOKEN,"XXX");
datamap.put("message", URLEncoder.encode(finalText, "ISO-8859-1"));
datamap.put("do", "postreply");
datamap.put("t", "483553");
//make a post
Jsoup.connect(url)
.header("Content-Type","application/x-www-form-urlencoded")
.timeout(10000)
.cookie(Session.COOKIE_HASH_KEY,session.bbsessionhash)
.cookie(Session.COOKIE_PASSWORD_KEY,session.bbpassword)
.cookie(Session.COOKIE_USERID_KEY,session.bbuserid)
.data(datamap).post();
Мое сообщение публикуется, НО оно не декодируется сервером. Итак, когда пользователь просматривает сообщение, он/она видит: %E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC%E4%F6%F5%FC
Примечание. Я делаю почтовый запрос с Android и отправляю данные в программное обеспечение форума vBulletin (воспроизведение в ветке).
Проблема: когда я отправляю сообщение с помощью JSoup, сервер видит его как обычный текст, а не закодированный текст. Как заставить сервер понять, что параметр сообщения содержит закодированный текст, а не обычный текст?
data
. Таким образом, использованиеURLEncoder.encode
для значения кодирует данные дважды. - person McDowell   schedule 09.11.2011URLEncoder.encode
добавляет простой текст к параметру сообщения, и я теряю определенные символы, которые необходимо кодировать. Рабочий запрос POST каким-то образом сообщает серверу, что сообщение закодировано, и вы (сервер) должны его декодировать. Но когда я пытаюсь воспроизвести его, сервер воспринимает сообщение как обычный текст. Любая идея, как я могу заставить сервер понять, что параметр сообщения содержит закодированный текст, а не обычный текст? - person Indrek Kõue   schedule 09.11.2011