如何用TIdHTTP控件从https下载图片

sinco449 2016-08-16 03:49:38
需要从微信下载一张二维码图片,URL地址是:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHN8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL1JFem1oTURsN1BtVjdpaWNZbUxqAAIEQ6aZVwMEgFEBAA==
这个URL地址是https的,我给TIdHTTP的IOHandler连接了一个TIdSSLIOHandlerSocketOpenSSL,同时也引入了libeay32.dll和ssleay32.dll,但是get得到的结果却是得到一个提示没有访问权限的页面。

begin
mem_Stream := TMemoryStream.Create;
try
url := 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHN8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL1JFem1oTURsN1BtVjdpaWNZbUxqAAIEQ6aZVwMEgFEBAA==';
idhttp1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; // IdSSLIOHandlerSocketOpenSSL1的SSLOptions的method已经设置为sslvSSLv23了。
IdHTTP.Get(url, mem_Stream);
mem_Stream.Position:= 0;
mem_Stream.SaveToFile('C:/qrcode.jpg');
finally
mem_Stream.Destroy;
end;
end;
...全文
947 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinco449 2016-09-14
  • 打赏
  • 举报
回复
将INDY升级成10.5.9,可以了。
zhuang_bx 2016-08-19
  • 打赏
  • 举报
回复
IdSSLIOHandlerSocketOpenSSL1的SSLOptions的Method设置为sslvSSLv23即可 本人测试环境: win7x64+Delphi7+Indy10.5.9
sinco449 2016-08-19
  • 打赏
  • 举报
回复
引用 5 楼 zhuang_bx 的回复:
IdSSLIOHandlerSocketOpenSSL1的SSLOptions的Method设置为sslvSSLv23即可 本人测试环境: win7x64+Delphi7+Indy10.5.9
我是WIN7X64 + Delphi2010 + Indy10.2.5,都已经设置成sslvSSLv23了,还是不行。
sinco449 2016-08-17
  • 打赏
  • 举报
回复
引用 1 楼 sazhufa 的回复:
如果你确认ticket没错,试试修改一下UA(User Agent)串,假装自己是一个浏览器。
ticket是没错的,你可以把我帖子里的URL放在浏览器地址栏里,可以显示出带有微信二维码的网页的。
sazhufa 2016-08-17
  • 打赏
  • 举报
回复
引用 2 楼 sinco449 的回复:
[quote=引用 1 楼 sazhufa 的回复:] 如果你确认ticket没错,试试修改一下UA(User Agent)串,假装自己是一个浏览器。
ticket是没错的,你可以把我帖子里的URL放在浏览器地址栏里,可以显示出带有微信二维码的网页的。[/quote] 我试了一下,微信不支持SSLv2,SSLv3, 只支持TLSv1, 你调整一下你的SSL组件的属性才行。
adslong 2016-08-17
  • 打赏
  • 举报
回复
试了半天,也是下载不了。 不过脑子一转 把https://网址 改成 http:// 再GET下载,可以了。 楼主试试
sazhufa 2016-08-16
  • 打赏
  • 举报
回复
如果你确认ticket没错,试试修改一下UA(User Agent)串,假装自己是一个浏览器。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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