【发布时间】:2018-09-02 13:04:26
【问题描述】:
我使用 WinINet 库连接到网站。
使用 Internet Explorer (Win10) 可以正常工作并向我显示选择要使用的证书的消息。
这是我调用的delphi代码:
FUNCTION TRAD.lastOrganization(): Integer;
VAR
js:TlkJSONobject;
ws: TlkJSONstring;
url, resp: String;
count,statusCodeLen, bodyCodeLen: Cardinal;
header,tmp: String;
buffer, body: String;
statusCode: ARRAY [0 .. 1024] OF Char;
bodyCode: ARRAY [0 .. 1024] OF Char;
UrlHandle: HINTERNET;
BEGIN
buffer := '00000000000000000000';
url := contextUrl + '/rest/organization/count';
UrlHandle := InternetOpenUrl(NetHandle, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
IF NOT ASSIGNED(UrlHandle) THEN
SHOWMESSAGE('Unable to read the amount of Organization using the URL ' + url + ': ' + SysErrorMessage(GetLastError));
statusCodeLen := Length(statusCode);
bodyCodeLen := Length(bodyCode);
count := 0;
IF HttpQueryInfo(UrlHandle, HTTP_QUERY_STATUS_CODE, @statusCode[0], statusCodeLen, count) THEN
BEGIN
buffer := statusCode;
IF buffer <> '200' THEN
BEGIN
ShowMessage('While read amount of Organization I got a status code ' + buffer + ' but 200 was expected.');
EXIT;
END;
END;
count := 0;
body := '';
REPEAT
FillChar(bodyCode, bodyCodeLen, 0);
IF NOT InternetReadFile(UrlHandle, @bodyCode[0], bodyCodeLen, count) THEN
BEGIN
ShowMessage('Problem on reading from response stream while read the amount of Organization using the URL ' + url + '.');
EXIT;
END;
IF count > 0 THEN
BEGIN
tmp := bodyCode;
body := body + LeftStr(tmp, count);
END;
UNTIL count = 0;
InternetCloseHandle(UrlHandle);
Result := strtoint(body);
END;
如果我调用该方法,我会收到以下消息:
Buuut,使用 Edge-Browser 我必须指定一个证书,而且效果很好。
问题
如何指定证书?
编辑(新信息):
如果我将代码更改为
FUNCTION TRAD.lastOrganization(): Integer;
VAR
js:TlkJSONobject;
ws: TlkJSONstring;
url, resp: String;
count,statusCodeLen, bodyCodeLen: Cardinal;
header,tmp: String;
buffer, body: String;
statusCode: ARRAY [0 .. 1024] OF Char;
bodyCode: ARRAY [0 .. 1024] OF Char;
UrlHandle: HINTERNET;
BEGIN
buffer := '00000000000000000000';
url := contextUrl + '/rest/organization/count';
UrlHandle := InternetOpenUrl(NetHandle, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
IF NOT ASSIGNED(UrlHandle) THEN
raiseLastOSError();
【问题讨论】:
-
不幸的是,您的屏幕截图中的错误消息没有提供信息,因为它只有您编码的文本。将错误代码转换为德语消息似乎存在问题。如果您提供
GetLastError返回的错误代码,可能会提供更多信息。 -
缺少翻译的错误代码是错误代码 317 (aka
ERROR_MR_MID_NOT_FOUND),其描述为 系统在 %2 的消息文件中找不到消息编号 0x%1 的消息文本. -
只是为了在同一页面上。您发布的代码是客户端代码?现在它在 IE 10 和 IE Edge 中工作,你希望它通过代码工作吗?
-
@TarunLalwani 是的。
标签: delphi microsoft-edge cryptoapi mutual-authentication