Delphi Indy http 选项

Delphi Indy http OPTIONS

我想使用 HTTP 选项

OPTIONS /MyURL/DoCmd HTTP/1.1
Origin: http://www.asite.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: access-control-request-method

用 Indy 做这个的方法是什么?

FIdHttp.Options('http://' + FHost + ':' + IntToStr(FPort) + '/MyURL/DoCmd', AResponseContent);

如果服务器没有实现OPTIONS会怎样?

What is the way to make this with Indy ?

Indy 10 中的

TIdHTTP 有 2 个重载的 Options() 方法:

procedure Options(AURL: string; AResponseContent: TStream); overload;

function Options(AURL: string
  {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF}
  ): string; overload;

TIdHTTP 没有的是 OriginAccess-Control-Request-... headers 的原生属性。但是,您可以对这些使用 TIdHTTP.Request.CustomHeaders 属性,例如:

FIdHttp.Request.CustomHeaders.Values['Origin'] := 'http://www.asite.com';
FIdHttp.Request.CustomHeaders.Values['Access-Control-Request-Method'] := ' POST';
FIdHttp.Request.CustomHeaders.Values['Access-Control-Request-Headers'] := 'access-control-request-method';
FIdHttp.ProtocolVersion := pv1_1;

Response := FIdHttp.Options('http://www.asite.com/MyURL/DoCmd');
or
FIdHttp.Options('http://www.asite.com/MyURL/DoCmd', AResponseContent);

What will happen if the OPTIONS is not implemented by the server ?

服务器可能会 return 一个错误代码,TIdHTTP 将引发 EIdHTTPProtocolException 异常,除非您在 TIdHTTP.HTTPOptions 中启用 hoNoProtocolErrorException 标志] 属性.