我想接近Exchange EWS Web服务并自己处理XML SOAP组合(请求)和解析(响应)。 因此,THTPPRIO似乎有点矫枉过正。
我正在尝试THTTPReqResp,但我被困在这里:
网络服务不遵循规范并期望
Content-Type: text/xml; charset=utf-8
而不是
Content-Type: text/xml; charset="utf-8"
如何使用THTTPReqResp添加/覆盖标头? 这是迄今为止的代码:
HTTPReqResp1.SoapAction := '"http://schemas.microsoft.com/exchange/services/2006/messages/ResolveNames"';
// HTTPReqResp1.UseUTF8InHeader := true; // Already
HTTPReqResp1.URL := 'https://webmail.mailserver.nl/ews/exchange.asmx';
HTTPReqResp1.Execute(TSRequest,TSResponse);
在执行时发生内容类型错误(如果我使用发送/接收而不是执行,则发生在接收上)
BTW如果THTTPReqResp不是正确的方法,欢迎提出意见。我也在尝试TidHTTP,请参阅this post。
使用Indy 10.5.8.0的Delphi XE2 Update 4
由于 扬
答案 0 :(得分:1)
我找到了它:
procedure TForm1.BeforeRRPost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
const
cContentHeader = 'Content-Type: text/xml; charset=utf-8';
begin
HttpAddRequestHeaders(Data, PChar(cContentHeader), Length(cContentHeader), HTTP_ADDREQ_FLAG_REPLACE);
// Or HttpAddRequestHeaders(Data, PChar(cContentHeader), Length(cContentHeader), HTTP_ADDREQ_FLAG_ADD);
end;
然后在HTTPReqResp1.Execute或HTTPReqResp1.Send:
之前HTTPReqResp1.OnBeforePost := BeforeRRPost;