Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Пересылка UTF-8 запроса с использованием TidHTTP   Найти похожие ветки 

 
olegl ©   (2005-09-01 12:27) [0]

Нужно переслать запрос UTF-8 из клиентского приложения с использованием TidHTTP. Получение данных запроса происходит нормально, а вот при отсылке сервер интерпретирует символы выше таблицы ASCII как некорректные. Подозреваю что функция UTF8Encode преобразует данные в непонятный для сервера формат или INDY не правельно пересылает данные. Сервер - Java-сервлет, TOMCAT/Apache. Перед самой отсылкой запроса пробовал данные скидывать в файл, все OK.

Код:

procedure TSocketThread.Initialize(ConnectionType: TConnectionType; Login,
 Password, Host: string; Port: integer);
begin
 FResponseReady:=false;
 FConnectionType:=ConnectionType;
 FHTTP.Request.Username:=Login;
 FHTTP.Request.Password:=Password;
 FHTTP.Request.Host:=Host;
 FHTTP.Host:=Host;
 FHTTP.Port:=Port;
 FHTTP.Request.ContentType:= "application/x-www-form-urlencoded;text/xml; charset=utf-8;";
//FHTTP.Request.ContentType:= "text/xml; charset=UTF-8;";
 FHTTP.Request.BasicAuthentication:=true;
 FInitialized:=true;
end;

procedure TSocketThread.Execute;
var
 sOut,sInp: TMemoryStream;
 Request: WideString;
 sStr:TtntStringList;
 ANSIResponse,ANSIRequest:string;
const
 jndiName = "lv/gcpartners/psi/webmodule/EntryPoint";
begin
 SetName;
   FWorking:=true;
   sInp:=TMemoryStream.Create;
   sOut:=TMemoryStream.Create;
   Request:=("jndiname="+jndiName+"&xmlmessage="+FRequest);
   ANSIRequest:=UTF8Encode(Request);
   sInp.Write((@ANSIRequest[1])^,length(ANSIRequest)); // Проблема тут !!!
   try
     try
       if sHost="" then
         raise Exception.Create("sHost field empty in TSocketThread.Execute");
       if FRequest="" then
         raise Exception.Create("Request field empty in TSocketThread.Execute");
       if FHTTP.Host="" then
         raise Exception.Create("TSocketThread not initialized in TSocketThread.Execute");
       if not assigned(FHTTP) then
         raise Exception.Create("TidHTTP not created in TSocketThread.Execute");
       FHTTP.Post("http://"+FHTTP.Request.Host+sHost, sInp, sOut);  // или тут... наверно :)
       FResponse.ResponseResult:=rrOk;
     except
       on E: Exception do
       begin
         FResponse.ErrorStr:=e.Message;
         FResponse.ResponseResult:=rrError;
       end;
     end;
   finally
     if FHTTP.ResponseCode=200 then
       FResponse.ResponseResult:=rrOk
     else if FHTTP.ResponseCode=401 then
     begin
       FResponse.ResponseResult:=rrError;
       FResponse.ErrorStr:="Bad login information." +#13#10+"Please re-type Username and Password carefully.";
     end
     else FResponse.ResponseResult:=rrError;
       sOut.Seek(0,soFromBeginning);
       SetLength(ANSIResponse,sOut.Size);
       sOut.Read((@ANSIResponse[1])^,sOut.Size);
       FResponse.XMLResponse:=UTF8Decode(ANSIResponse);
       FHTTP.Free;
       SInp.Free;
       sOut.Free;
       FRequest:="";
       FResponseReady:=true;
       FWorking:=false;
   end;
end;


 
olegl ©   (2005-09-01 12:33) [1]

Наверно стоит дополнить что если запрос не содержит нелатнских символов то все OK



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.045 c
3-1130145891
Viktop
2005-10-24 13:24
2005.12.11
Memo в DBGrid


2-1130507566
FYNJY
2005-10-28 17:52
2005.12.11
Использование CLIPS


14-1131958924
Юрий Зотов
2005-11-14 12:02
2005.12.11
Чемпионат сайта по бильярду


3-1130400948
msguns
2005-10-27 12:15
2005.12.11
Два курсора и один НД


2-1132558051
B@BY
2005-11-21 10:27
2005.12.11
Базы данных - MS Access





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский