怎么给防外链的图片做代理访问呢?

发布于 2022-09-13 01:24:57 字数 864 浏览 28 评论 0

浏览器里可以直接访问,但是在自己的域名下,用<img>显示就返回403
所以想做个代理访问,但是如下代码返回的内容不对,头大
求大佬们帮忙看下吧

http://abc.com/proxy?url=http://xxx.com/1.jpg
最好可以做到url的query传递要访问的url,就可以返回指定url的img或html
可以用python或nodeJs都行,最终会放在阿里云的云函数中运行

var http = require('http')
var fs = require('fs')

const proxy = (url) => {
  return new Promise(resolve => {
    http.get(url, res => {
      var result = ''
      res.setEncoding('binary')
      res.on('data', function(data) {
        result += data
      })
      res.on('end', function() {
        resolve(result)
      })
    })
  })
}

exports.handler = async (req, res, context) => {
   console.log(req.queries.url)

   res.setHeader("content-type", "image/jpg")
   return res.send(await proxy(req.queries.url))
}

image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南风起 2022-09-20 01:24:57

自己解决啦~~~
以下代码支持html和img的代理
放在阿里云函数(运行环境 Node.JS 12.x HTTP 函数)里就能用

var http = require('http')

exports.handler = async (req, res) => {
  console.log(req.queries.url)

  const proxy = (url) => {
    return new Promise(resolve => {
      http.get(url, res => {
        var result = []
        res.on('data', data => result.push(data))
        res.on('end', () => resolve(Buffer.concat(result)))
      })
    })
  }

  // 写的比较简单,有需要的话,自己做更复杂的判断吧
  if (req.queries.url.includes('.jpg')) {
    res.setHeader('content-type', 'image/jpg')
  }

  return res.send(await proxy(req.queries.url))
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文