1

私の前の他の人と同じように、Delphi 2010でIdHttp(Indy 10.5.5)コンポーネントを使用するのに問題があります。コードはDelphi7で正常に機能します。

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コードのこれまでの唯一の違いは、文字列タイプをAnsiStringに変更し、HTTPリクエストプロパティを追加したことです。

サーバーから返される応答は次のとおりです。'XMLの解析に失敗しました。Line:1 Position:19'で空白が予想されます。プロセスのどこかでXMLが文字化けしていると思いますが、どこが間違っているのかわかりません。

何か案は?

4

1 に答える 1

1

Post() の TStrings バージョンは、デフォルトで「application/x-www-form-urlencoded」コンテンツ タイプに従って入力データをエンコードしますが、代わりに ContentType を「text/xml」に設定しています。生の XML データを単独で投稿する。D7 コードで ContentType を設定していない場合、TIdHTTP は ContentType を「application/x-www-form-urlencoded」に設定していました。同じ ContentType 値を自分で設定するか、割り当てを再度削除して、TIdHTTP が再度実行できるようにすることで、D2010 コードで同じ動作を再現する必要があります。

于 2010-05-26T06:43:13.393 に答える