Indy HTTP post 使用 TStringList 作为发送参数时出错
Error on Indy HTTP post using TStringList as sending parameter
我创建了一个访问邮件服务网络服务的小程序。相同的代码适用于 Delphi 7 with indy 9,但不适用于 Delphi Seattle with Indy 10.
我的 Stringlist 是这样构建的:
ParametrosConsulta.Values['nCdEmpresa'] := Edt_Cod.Text;
ParametrosConsulta.Values['&sDsSenha'] := Edt_Sen.Text;
...
我的 post 有一个发送参数 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
然后我这样调用 idHttp.Post,其中 ParametroConsulta
包含我之前显示的文本,而 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;
但是在post之后,缺少sDsSenha
的网络服务returns(这个参数可以容纳一个空的space)。
不要写&
:
ParametrosConsulta.Values['sDsSenha'] := Edt_Sen.Text;
& 符号由 Indy 自动添加。 顺便说一句,您可能需要使用 TIdURI.PathEncode(Edt_Sen.Text)
来转义某些字符。
我创建了一个访问邮件服务网络服务的小程序。相同的代码适用于 Delphi 7 with indy 9,但不适用于 Delphi Seattle with Indy 10.
我的 Stringlist 是这样构建的:
ParametrosConsulta.Values['nCdEmpresa'] := Edt_Cod.Text;
ParametrosConsulta.Values['&sDsSenha'] := Edt_Sen.Text;
...
我的 post 有一个发送参数 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
然后我这样调用 idHttp.Post,其中 ParametroConsulta
包含我之前显示的文本,而 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;
但是在post之后,缺少sDsSenha
的网络服务returns(这个参数可以容纳一个空的space)。
不要写&
:
ParametrosConsulta.Values['sDsSenha'] := Edt_Sen.Text;
& 符号由 Indy 自动添加。 顺便说一句,您可能需要使用 TIdURI.PathEncode(Edt_Sen.Text)
来转义某些字符。