【发布时间】:2020-01-29 07:50:53
【问题描述】:
我正在尝试使用 Indy HTTP 客户端连接到在线 API。我收到的错误是“授权失败(这是我们的消息)EIdOSSLUnderlyingcryptoerror 连接 SSL 时出错,错误:14094410:ssl ROUTINES:SSL3_READ_BYTES:SSLV3 警报握手失败。”
idSSLIOHandler 设置为 sslmClient 模式。
`procedure TOnLineSettingsForm.Button5Click(Sender : TObject);
var
S: TStringStream;
R : TStringStream;
sTest : String;
sResponse : String;
sAuthCode : AnsiString;
begin
//S := TStringList.Create;
R := TStringStream.Create;
if Length(edCert.Text) <> 0 then
begin
try
try
sAuthCode := 'AUTHORISATION:' + edCert.Text;
S := TStringStream.Create('AUTHORISATION:' + edCert.Text, TEncoding.UTF8);
S.Position := 0;
with IdHTTP1 do
begin
IOHandler := IdSSLIOHandlerSocketOpenSSL1;
Post('https://api.cloudwaitress.com/V1/...', S); // sAuthCode);
sResponse := ResponseText;
end;
sTest := R.DataString;
except
on e:exception do
begin
Showmessage('Authorisation failed....' + e.ClassName + ' ' + e.Message);
sTest := R.DataString;
end;
end;
finally
s.Free;
R.Free;
end;
end else
begin
Beep;
Beep;
ShowMessage('Please enter the id code.');
end;
end;`
文档说身份验证需要以下内容
卷曲https://api.cloudwaitress.com/v1/... -H "授权:YOUR_API_KEY"
我担心网址末尾的“...”会无效,所以我把它省略了。得到错误所以把它放回去。同样的错误。所以,我怀疑,问题出在别的地方。我注意到授权不包括有关内容类型的任何内容。尽管对此 API 的其他请求确实并且需要“application/json”。
握手失败是否可能仅仅意味着 API 连接无效?
对不起 - 应该说 - Indy 版本是 10.6.1.5182。我注意到,如果服务器上需要 TLS,则可能会触发相同的错误。而 Indy 10.6.2 解决了这个问题。我是否需要获得更新版本的 Indy?
谢谢
艾伦
【问题讨论】:
-
...应替换为您要执行的 API 方法。 -
我怀疑可能是这种情况。并试了一下。不用找了。结果相同。我开始认为文档有问题。
标签: api delphi authorization indy idhttp