Главная страница
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.47 MB
Время: 0.156 c
3-1130480653
goris
2005-10-28 10:24
2005.12.11
Использование баз 1С


5-1116849129
PavelP
2005-05-23 15:52
2005.12.11
Как получить список контролов


2-1132721288
Васяня
2005-11-23 07:48
2005.12.11
ADO + DSN (Alias)


14-1132527717
Старт
2005-11-21 02:01
2005.12.11
Что за Питон такой для Дельфи?


2-1132426180
tigrenok
2005-11-19 21:49
2005.12.11
Помогите с именами компонентов!!!