我創建了一個訪問郵件服務web服務的小程序。相同的代碼工作德爾福7印9,但並不可與德爾福西雅圖與印10在使用TStringList作爲發送參數的Indy HTTP post上的錯誤
我的StringList是建立這樣:
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
然後我打電話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;
但發佈後,web服務返回缺少sDsSenha
(該參數可以容納一個空的空間)。
如何構建參數集合?通過'DelimitedText'? – Victoria
@維多利亞我使用的鍵和值 – William
不要使用'&'字符。 Indy爲你連接參數。 – Victoria