我正在开发一个涉及登录和下载的项目,对于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
错误,其他浏览器中的类似错误是图片o 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
此特定网站。)
答案 0 :(得分:0)
我刚注意到windows internet explorer无法打开网站!!它会返回错误:
在高级设置中启用TLS 1.0,TLS 1.1和TLS 1.2,然后尝试再次连接到somesite.com。如果此错误仍然存在,请与您的站点管理员联系。
启用sslvTLSv1
媒体资源中的sslvTLSv1_1
,sslvTLSv1_2
和TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions
标记。
我认为该网站的证书是假的,如果我去设置并取消选中
检查发布商证书撤销
在Internet Explorer中的选项,该网站打开!
为TIdSSLIOHandlerSocketOpenSSL.OnVerifyPeer
事件分配处理程序,并为要接受的任何证书返回True。