メールサービスのWebサービスにアクセスする小さなプログラムを作成しました。同じコードは、インディ9とデルファイ7で動作しますが、インディ10送信パラメータとしてTStringListを使用したIndy HTTP投稿でエラーが発生しました
とデルファイシアトルで動作しません 私の文字列リストがそのように構築されて:
ParametrosConsulta.Values['nCdEmpresa'] := Edt_Cod.Text;
ParametrosConsulta.Values['&sDsSenha'] := Edt_Sen.Text;
...
私のポストを送信パラメータSTRINGLISTを持っています、これは持っているようなテキスト:その後、
nCdEmpresa= &sDsSenha= &nCdServico=41106&sCepOrigem=88905355&sCepDestino=88906768&nVlPeso=20.0&nCdFormato=1&nVlComprimento=20.0&nVlAltura=20.0&nVlLargura=20.0&nVlDiametro=6.0&sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=N
は私が以前に示されたテキストを保持するParametroConsulta
、そのようidHttp.Postを呼び出し、Resposta
は、要求の応答を保持しているTStringStreamです:
IdHttp.Request.Clear;
IdHttp.Request.Host := 'ws.correios.com.br';
IdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
idHTTP.Request.UserAgent := 'Mozilla/3.0 (compatible;Indy Library)';
IdHTTP.Request.Charset := 'utf-8';
IdHTTP.ProtocolVersion := pv1_1;
{...}
try
Application.ProcessMessages;
FrmPrincipal.Refresh;
IdHttp.Post('http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo', ParametrosConsulta, Resposta);
except
on E:EIdHttpProtocolException do
begin
ShowMessage(E.Message + ' - ' + E.ErrorMessage);
PnlEnviando.Visible := False;
Exit;
end;
end;
しかし、投稿後、sDsSenha
が欠落しています(このパラメータには空白を入れることができます)。
どのようにパラメータコレクションを作成しますか? 'DelimitedText'を通して? – Victoria
@Victoriaキーと値を使用しています – William
'&' charを使わないでください。 Indyはあなたのためにパラメータを連結します。 – Victoria