html开发怎么解决a标签打开百度图片链接地址后无法显示的问题

问题描述

今天开发一个图像识别类的网站时,出现这种情况,我已经通过php解析到了百度图片的链接地址,然后我把链接地址直接传入到a标签href的属性中,发现通过浏览器点击a标签会出现该图片仅限百度用户内部使用的错误,也就是本来的图片显示不出来,这种情况怎么解决呢?我想可能是跨域的问题,但是我是新手,不知道怎么写,想请教一下大神给个思路,谢谢。

clipboard.png

问题出现的环境背景及自己尝试过哪些方法

phpstorm+chrome+apache+mysql。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

<a id="D_a_1" href="<?php echo $_GET['img'];?>" class="am-btn am-btn-block am-btn-success">查看图片</a>
href="<?php echo $_GET['img'];?>"
这行解析后得出百度图片对应的链接地址:http://imgsrc.baidu.com/baike/pic/item/09fa513d269759ee04b1bbefbefb43166d22df35.jpg

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4.4k
2 个回答

防盗链。
尝试在网页的 meta 区域加上。

<meta name="referrer" content="never">

防盗链,会检查HTTP请求的Referer头信息(小题外话:当初制定标准的人大概是大脑断线了,这里把referrer错拼成referer了,后来发现时已经无法挽回了,所以这里要记住不要拼对了)。在浏览器发送请求时会把Referer设置为请求发出的页面URL(点击链接,就是链接所在的页面URL;加载图片、JS等资源,就是加载这些资源的页面URL;发送AJAX请求,就是请求发出的页面URL),百度检测到这个页面不是他们自己的域名,就拒绝你访问。

另一个答案里提到的用meta元素设置referernever,实际这里设置的是referer-policy
,是告诉浏览器如何设置Referer的。never就是不设置(就好像是从地址栏直接访问),如果百度不拒绝直接访问(你可以直接用浏览器直接输入图片地址来验证),这个可以工作。如果百度拒绝直接访问,那你只能抓取图片到你自己的服务器了,然后再提供给用户访问了。

抓取就是自己用cURL或者|fsockopen`等构建请求,设置好能访问的Referer头信息,然后保存到本地。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题