IdHttp Post Method Delphi 2010 - PullRequest
       27

IdHttp Post Method Delphi 2010

1 голос
/ 26 мая 2010

Как и у других до меня, у меня проблемы с использованием компонента IdHttp (Indy 10.5.5) в Delphi 2010. Код отлично работает в Delphi 7:

var
XMLString : AnsiString;
lService  : AnsiString;

ResponseStream: TMemoryStream;
InputStringList : TStringList;
begin
  ResponseStream := TMemoryStream.Create;
  InputStringList := TStringList.Create;

  XMLString :='<?xml version="1.0" encoding="ISO-8859-1"?> '+
          '<!DOCTYPE pnet_imessage_send PUBLIC "-//PeopleNet//pnet_imessage_send"   "http://open.peoplenetonline.com/dtd/pnet_imessage_send.dtd"> '+
          '<pnet_imessage_send> '+
          '   <cid>username</cid> '+
          '   <pw>password</pw> '+
          '   <vehicle_number>tr01</vehicle_number> '+
          '   <deliver>now</deliver> '+
          '   <action> '+
          '     <action_type>reply_with_freeform</action_type> '+
          '     <urgent_reply>yes</urgent_reply> '+
          '   </action> '+
          '   <freeform_message>Test Message Version 2</freeform_message> '+
          '</pnet_imessage_send> ';
  lService := 'imessage_send';

  InputStringList.Values['service'] := lService;
  InputStringList.Values['xml'] := XMLString;

  try
    IdHttp1.Request.Accept := '*/*';
    IdHttp1.Request.ContentType := 'text/XML';
    IdHTTP1.Post('http://open.peoplenetonline.com/scripts/open.dll', InputStringList, ResponseStream);
    ...
  finally
    ResponseStream.Free;
    InputStringList.Free;
   end;

Единственные различия междуэто и код D7 - я изменил типы String на AnsiString и добавил свойства HTTP-запроса.

Ответ, который я получаю от сервера: «XML не удалось проанализировать.Пробел, ожидаемый в строке: 1 Позиция: 19 ', я предполагаю, что XML где-то искажен, но я не могу понять, где я ошибаюсь.

Есть идеи?

1 Ответ

1 голос
/ 26 мая 2010

Версия Postt (TStrings) по умолчанию кодирует входные данные в соответствии с типом контента application / x-www-form-urlencoded, но вместо этого вы устанавливаете ContentType в text / xml, даже если фактически не публикует необработанные данные XML самостоятельно. Если вы не устанавливали ContentType в своем коде D7, тогда TIdHTTP устанавливал ContentType на «application / x-www-form-urlencoded» для вас. Вы должны отразить такое же поведение в своем коде D2010, либо установив то же значение ContentType самостоятельно, либо снова удалив назначение, чтобы TIdHTTP мог сделать это снова для вас.

...