Главная страница
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.053 c
2-1132825558
thvfrjd
2005-11-24 12:45
2005.12.11
Excel


3-1130428514
Apachi
2005-10-27 19:55
2005.12.11
Доступ к данным через интернет ISAPI


14-1131899671
default
2005-11-13 19:34
2005.12.11
Задачка


3-1130322965
MakNik
2005-10-26 14:36
2005.12.11
Количесво дней в месяце


6-1125594470
Alex_Korn
2005-09-01 21:07
2005.12.11
Определение размера закачиваемого файла.