【发布时间】:2016-12-12 20:15:38
【问题描述】:
我正在做一个涉及登录和下载的项目,有20多个站点,在某些情况下,站点非常相似,甚至它们的结构都相同
我最近遇到了一个问题,一些相同的结构化网站是http,一些是Https,Http 还可以并且工作正常,但Https 最开始的post 返回错误500 internal server 当我尝试登录时,显示响应代码
for security reasons you can not access ...
我需要用https 网站改变我的方法吗?我该如何解决这个问题?
我的代码:
mIdHttp := TIdHttp.create(nil);
mIdHttp.AllowCookies := true;
mIdHttp.HandleRedirects := true;
mIdHttp.Request.Charset := 'utf-8';
requestList.add('the post info from http analyzer');
mIdHttp.post('site login url', requestList, responseCode); // error happens here
出于隐私原因,我不能分享任何网站的网址
编辑:
我做了关于设置处理程序的建议
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
mIdHttp.IOHandler:=LHandler;
但它没有工作! (我也下载了两个dll)
新发展:
我刚刚注意到 Windows Internet Explorer 也无法打开该网站!它返回一个错误:
Turn on TLS 1.0, TLS 1.1, and TLS 1.2 in Advanced settings and try connecting to somesite.com again. If this error persists, contact your site administrator.
我认为 该网站的证书是假的,如果我去设置并取消选中
check for publisher certifcate revocation
Internet Explorer 中的选项,网站打开!,这是我收到错误的原因吗? 我怎样才能对 idHttp 做同样的事情?
编辑 2(一个新站点):
因为这个站点的问题与上一个非常相似,我决定 不创建新问题为此
我在使用新站点时收到错误 500,当我尝试手动访问该站点并登录时,我在 firefox 中收到 This Connection is Untrusted 错误,在其他浏览器中出现类似错误 这是 firefox 的图片错误:
我已经试过了
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
//LHandler.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
LHandler.OnVerifyPeer := OnVerifyPeer;
mIdHttp.IOHandler := LHandler;
function OnVerifyPeer(certificate: TIdX509; AOk: Boolean; Adepth:Integer; AError: Integer): boolean;
begin
Result := true;
end;
但我仍然遇到同样的错误
我还应该提到,在这种特殊情况下,使用 idHttp.Get 不会 导致任何错误,当我尝试使用 Post 登录时会发生错误。
还有一件事,我同时使用了httpAnalyzer 和fiddler,但是当我运行我的程序时,它们都无法获取posts 或gets 的站点(它们只有不起作用当我使用我的程序并尝试post和get这个特定站点时)。
【问题讨论】:
-
请参阅stackoverflow.com/questions/6683127/delphi-idhttpssl,了解如何将 SSL 库添加到您的项目中
-
阅读“如何创建最小、完整和可验证的示例”。如果你不能提供这样的例子,不要问,因为没人能猜到那里发生了什么stackoverflow.com/help/mcve
-
你不需要分享 url,使用支持 https 的公共站点,如 google.com。它将使您的示例更容易测试写入测试写入更快。
标签: delphi delphi-xe indy indy10 idhttp