【问题标题】:idHttp : error 500 internal server when site is httpsidHttp : 站点为 https 时出现错误 500 内部服务器
【发布时间】:2016-12-12 20:15:38
【问题描述】:

我正在做一个涉及登录和下载的项目,有20多个站点,在某些情况下,站点非常相似,甚至它们的结构都相同
我最近遇到了一个问题,一些相同的结构化网站是http,一些是HttpsHttp 还可以并且工作正常,但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 登录时会发生错误。
还有一件事,我同时使用了httpAnalyzerfiddler,但是当我运行我的程序时,它们都无法获取postsgets 的站点(它们只有不起作用当我使用我的程序并尝试postget这个特定站点时)。

【问题讨论】:

标签: delphi delphi-xe indy indy10 idhttp


【解决方案1】:

我刚刚注意到 Windows Internet Explorer 也无法打开该站点!它返回一个错误:

在高级设置中打开 TLS 1.0、TLS 1.1 和 TLS 1.2,然后尝试再次连接到 somesite.com。如果此错误仍然存​​在,请联系您的站点管理员。

TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions 属性中启用sslvTLSv1sslvTLSv1_1sslvTLSv1_2 标志。

我认为该网站的证书是假的,如果我去设置并取消选中

检查发布者证书吊销

Internet Explorer 中的选项,网站打开!

TIdSSLIOHandlerSocketOpenSSL.OnVerifyPeer 事件分配一个处理程序,并让它为您想要接受的任何证书返回 True。

【讨论】:

  • 我做了LHandler.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; 并为 OnVerifyPeer 分配了一个处理程序,但仍然是同样的错误,使用 Get 也会给出同样的错误,我还应该提一下,当我在 @ 中设置断点时987654328@函数,它永远不会被调用,这正常吗?
  • 我在一个新网站上遇到了非常相似的问题,请阅读编辑 2
猜你喜欢
  • 1970-01-01
  • 2011-11-27
  • 2023-03-29
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多