哪位高手用过IdHTTP?现在不能获取https的内容呢?

zhgwbzhd 2019-09-04 04:19:50
我使用bcb 2010,添加了IdHTTP1和IdSSLIOHandlerSocketOpenSSL1,将IdHTTP1的IOHandler设置为IdSSLIOHandlerSocketOpenSSL1。

测试了几个简单的http网站,没问题。
比如:
AnsiString MY_Web;
TStringStream *my_Stream;

my_Stream = new TStringStream();

MY_Web = "http://www.sohu.com";
IdHTTP1->Get(MY_Web,my_Stream);
Memo1->Lines->Add(my_Stream->DataString);

delete my_Stream;

这样可以获取信息的。
但是地址换成https://www.baidu.com或https://bbs.csdn.net/forums/BCBNetwork都会报错的。

这个该如何处理呢?谢谢各位!!
...全文
464 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgwbzhd 2019-09-05
  • 打赏
  • 举报
回复
try { ... catch(Exception &e) { Memo1->Lines->Add(e.Message); } 获取到,异常信息为:HTTP/1.0 503 Service Unavailable
  • 打赏
  • 举报
回复
呃,预编译的二进制版本在这里:https://wiki.openssl.org/index.php/Binaries
  • 打赏
  • 举报
回复
换openssl高版本试试:https://www.openssl.org/source/
zhgwbzhd 2019-09-04
  • 打赏
  • 举报
回复
感谢各位,目前是这样的。 1、添加了IdHTTP1控件,又添加了IdSSLIOHandlerSocketOpenSSL1。 2、设置IdSSLIOHandlerSocketOpenSSL1的SSLOptions内的Method为sslvTLSv1,Mode为sslmUnassigned。 3、设置IdHTTP1的IOHandler为IdSSLIOHandlerSocketOpenSSL1。 4、通过https://indy.fulgan.com/SSL/下载了openssl-1.0.2s-i386-win32.zip,得到了ssleay32.dll和libeay32.dll,把这两个复制到应用的目录。 5、目前发现https://bbs.csdn.net和https://www.sogou.com通过get方式可以得到返回信息。 但是https://www.baidu.com,https://weixiao.qq.com就会异常报错了。
zhgwbzhd 2019-09-04
  • 打赏
  • 举报
回复
引用 2 楼 早打大打打核战争 的回复:
你需要uses IdSSLOpenSSL; 然后带上带上open ssl的DLLs,indy的作者很早就说过,由于美国出口管制的限制,他没办法把SSL支持写在indy里,所以需要外部DLLs(从美国之外的网站下载)
可以给出明示么?
  • 打赏
  • 举报
回复
你需要uses IdSSLOpenSSL; 然后带上带上open ssl的DLLs,indy的作者很早就说过,由于美国出口管制的限制,他没办法把SSL支持写在indy里,所以需要外部DLLs(从美国之外的网站下载)
ooolinux 2019-09-04
  • 打赏
  • 举报
回复
ccrun.com 官方技术群 2602062 @麦子 好像懂。
初学者的习作,简单实现应用程序的网络验证思路。望高手勿笑。现在程序采用网络验证的越来越多,但我找遍了网络也没有找到如何自己编程实现网络验证,有感于此,我采用以下方法进行网络验证:具体方法:1.建立http服务器。我是采用asp+access数据库实现web服务器程序,然后用netbox2.7封装成独立的web服务器程序(也可以不封装,只是要安装一个http服务器程序提供对asp的解析),提供http服务的。相关文件:data.mdb addinfo.asp getinfo.asp conn.asp(为asp源文件) netregsrv.exe(用netbox 2.7封装完成的http服务器程序,可以不要其他http服务器程序,如iis、pws、apache等) ;2.应用程序:采用indy控件中的idhttp组件,构造http头,向指定的服务器发送用户名和密码,然后从服务器端的数据库中获取对应的注册码。运行方法: 确保本机的80端口没被占用。 先运行netregsrv.exe,然后运行Project1.exe,可以自己看data.mdb数据库中已有的数据然后测试。后话:本程序中为演示方便,服务器地址设为了本地(localhost)。同时也只是我为了实现我所想像的网络验证思路而作。在此思路上,也可以再加入加密算法和程序中合理的效验和一定的安全措施,可以一定程度地提高自己的程序的安全性,不太成熟,欢迎大家共同讨论,但请高手勿笑。
用法: $(“#box”).easydrag();//给指定的标签绑定拖动效果,也可以是Class $(“#box”).setHandler(‘handler’);//指定触发拖动的元素,download best apps for iphone 5handler是该元素的idhttp://www.newipadipa.com/ ,后面我们需要修改它 首先这个插件真的很好用(废话),短短2行代码就能让页面中的div动起来。但是如果要拖动很多div的时候 ,我们还是要稍微做出修改才能正常使用。 首先我的弹窗div在弹出的时候是默认在页面正中的,但是要使用这个插件被拖动的div就要使 用”position:absolute”的属性定位,这让我们的居中非常困难。解决思路:在触发弹窗之前用js获取当前屏 幕的分辨率然后将div居中。 js代码: { var div_width=Number(jQuery(‘#box’).css(‘width’)); var sc_width=(Number(window.screen.width)/2-(div_width/2)); //div距离浏览器左边框的距离为屏幕宽 度的一半-div宽度的一半 jQuery(‘#box).css(‘left’,sc_width); } 好了,初始化之后就是拖动了,如果需要拖动的div不多的话这样就可以了。但是我写的页面要拖动的div较多 ,而且这个插件只能用id号给元素绑定触发拖动的属性,如果一个id一个id的绑定事件的话会造成代码冗余 。所以我们要修改一下源文件jquery.easydrag.handler.beta2.js:找到 function(handlerId) 这个函数, 将里面的$(“#”+handlerId)都改成$(“.”+handlerId)就可以了。好吧,这样就可以了,下面是实例,高手们请 无视好了。。。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧