zoukankan      html  css  js  c++  java
  • 通过服务端中转显示防盗链图片

     我有一个功能去采集别人网站有用的内容,采集内容中有一个图片链接,可以单独打开,但放在我的网站就无法显示,出错提示:

    很明显,有防盗链功能,只能在他的网站才能打开,这个好办,几行代码

    在我的网站加一个中转请求,在服务端获取图片流,输出到我的客户端(localhost):

    // GET: Home/PickUpImage?src=http://xxxx:yy
    public async Task<ActionResult> PickUpImage(string src)
    {
        if (string.IsNullOrEmpty(src)) return HttpNotFound();
        var stream = await HttpHelper.GetAsync(src);
        return File(stream, "image/png");
    }

    其中 HttpHelper 是我操作HTTP请求的工具类(必须是单例模式或静态方法类,不能做成实例类) ,里面是通过 HttpClient 实现的,每次请求都会记住Cookie(重点),部分代码实现:

    public class HttpHelper
        {
            private static readonly HttpClient _hc;
            static HttpHelper()
            {
                _hc = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false, UseCookies = true });
                _hc.MaxResponseContentBufferSize = 2 * 1024 * 1024; //2MB
                _hc.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
                _hc.Timeout = new TimeSpan(0, 1, 0); //1 minute
            }
            public static async Task<Stream> GetAsync(string url)
            {
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                }
                return await Client.GetStreamAsync(url);
            }
    }

    这样页面上img的src地址由

    https://cdn.whatismyipaddress.com/images/flags/mo.png

    改成

    http://localhost:3721/Home/PickUpImage?src=https://cdn.whatismyipaddress.com/images/flags/mo.png

    图片就能显示了

  • 相关阅读:
    开启Android应用调试选项的工具XDebug的介绍
    Android Linker 与 SO 加壳技术
    PE文件格式偏移参考
    Android apk快速定位、灰色按钮克星--DroidSword
    Android系统加载Apk文件的时机和流程分析(1)--Android 4.4.4 r1的源码
    开启Android Apk调试与备份选项的Xposed模块的编写
    基于Xposed Hook实现的Android App的协议算法分析小工具-CryptoFucker
    排序学习之---选择排序
    在PHPStorm中快速插入当前日期
    排序学习之---插入排序
  • 原文地址:https://www.cnblogs.com/felixnet/p/8972835.html
Copyright © 2011-2022 走看看