Данные Urlencoding для тела почтового запроса. Я использую неправильную кодировку? - PullRequest
3 голосов
/ 28 октября 2011

Я хочу скопировать рабочий запрос POST на Java. Для целей тестирования давайте возьмем сообщение типа: ' äöõüäöõüäöõüäöõü '

Рабочий запрос POST (с закодированным сообщением ' äöõüäöõüäöõüäöõü '):

Заголовок

POST http://www.mysite.com/newreply.php?do=postreply&t=477352 HTTP/1.1
Host: www.warriorforum.com
Connection: keep-alive
Content-Length: 403
Origin: http://www.mysite.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko)Chrome/14.0.835.202 Safari/535.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: */*
Referer: http://www.mysite.com/test-forum/477352-test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: bblastvisit=1319205053; bblastactivity=0; bbuserid=265374; bbpassword=1125e9ec1ab41f532ab8ec6f77ddaf94; bbsessionhash=91444317c100996990a04d6c5bbd8375;

Body

securitytoken=1319806096-618e5f9012901e2d818bf2c74c2121baa064be57&ajax=1&ajax_lastpost=1319806096&**message=%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC**&wysiwyg=0&styleid=1&signature=1&fromquickreply=1&s=&do=postreply&t=477352&p=who%20cares&specifiedpost=0&parseurl=1&loggedinuser=265374

Как мы видим в теле запроса ' äöõüäöõüäöõüäöõü кодируется как: %u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC

Теперь я хочу повторить это.

Позволяет Url кодировать текст с помощью charset utf-8 в Java:

String userText = "äöõüäöõüäöõüäöõü";
String encoded = URLEncoder.encode(userText, "utf-8");

Результат :% C3% A4% C3% B6% C3% B5% C3% BC% C3% A4% C3% B6% C3% B5% C3% BC% C3% A4% C3% B6% C3% B5% C3% BC% C3% A4% C3% B6% C3% B5% C3% BC% 0A% 0A% 0A% 5BIZE% 3D% 221% 22% 5D% 5BI% 5D << НЕ ЖЕ </p>

Давайте попробуем ISO-8859-1:

String userText = "äöõüäöõüäöõüäöõü";
String encoded = URLEncoder.encode(userText, "ISO-8859-1");

Результат :% E4% F6% F5% FC% E4% F6% F5% FC% E4% F6% F5% FC% E4% F6% F5% FC% 0A% 0A% 0A% 5BSIZE% 3D% 221% 22% 5D% 5BI% 5D << НЕ ЖЕ </p>

Ни один из них не выдает ту же самую закодированную строку, как в рабочем примере, но все они имеют одинаковый ввод. Что мне здесь не хватает?

1 Ответ

4 голосов
/ 28 октября 2011
%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC%u00E4%u00F6%u00F5%u00FC

Я не знаю, как закодированы вышеуказанные данные, но это не application/x-www-form-urlencoded; charset=UTF-8, как утверждает запрос. Это недопустимые данные для этого типа MIME.

Похоже, что-то в кодировке UTF-16BE.

URLEncoder.encode(userText, "utf-8"); будет правильным способом кодирования значений application/x-www-form-urlencoded; charset=UTF-8, если это действительно то, что ожидал сервер. ( исх * 1 010 *)

...