如何使用THTTPReqResp添加/覆盖HTTP标头?

时间:2012-11-12 14:32:18

标签: delphi http delphi-xe2 indy

我想接近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

由于 扬

1 个答案:

答案 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;