全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1925|回复: 10

反代了个网站但是图片加载不出来

[复制链接]
发表于 2023-3-26 02:48:53 | 显示全部楼层 |阅读模式
反代了个网站但是图片加载不出来 有大佬知道咋回事吗
我用的cf works反代和nginx反代都加载不出图片

这是我用的反代代码
源站:https://www.linovelib.com/
  1. // 反代目标网站.
  2. const upstream = 'www.linovelib.com'

  3. // 反代目标网站的移动版.
  4. const upstream_mobile = 'w.linovelib.com'

  5. // 访问区域黑名单(按需设置).
  6. const blocked_region = ['TK']

  7. // IP地址黑名单(按需设置).
  8. const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

  9. // 路径替换.
  10. const replace_dict = {
  11. '$upstream': '$custom_domain',
  12. '//archiveofourown.org': ''
  13. }

  14. addEventListener('fetch', event => {
  15. event.respondWith(fetchAndApply(event.request));
  16. })

  17. async function fetchAndApply(request) {

  18. const region = request.headers.get('cf-ipcountry').toUpperCase();
  19. const ip_address = request.headers.get('cf-connecting-ip');
  20. const user_agent = request.headers.get('user-agent');

  21. let response = null;
  22. let url = new URL(request.url);
  23. let url_host = url.host;

  24. if (url.protocol == 'http:') {
  25.     url.protocol = 'https:'
  26.     response = Response.redirect(url.href);
  27.     return response;
  28. }

  29. if (await device_status(user_agent)) {
  30.     var upstream_domain = upstream;
  31. } else {
  32.     var upstream_domain = upstream_mobile;
  33. }

  34. url.host = upstream_domain;

  35. if (blocked_region.includes(region)) {
  36.     response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
  37.         status: 403
  38.     });
  39. } else if(blocked_ip_address.includes(ip_address)){
  40.     response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
  41.         status: 403
  42.     });
  43. } else{
  44.     let method = request.method;
  45.     let request_headers = request.headers;
  46.     let new_request_headers = new Headers(request_headers);

  47.     new_request_headers.set('Host', upstream_domain);
  48.     new_request_headers.set('Referer', url.href);

  49.     let original_response = await fetch(url.href, {
  50.         method: method,
  51.         headers: new_request_headers
  52.     })

  53.     let original_response_clone = original_response.clone();
  54.     let original_text = null;
  55.     let response_headers = original_response.headers;
  56.     let new_response_headers = new Headers(response_headers);
  57.     let status = original_response.status;

  58.     new_response_headers.set('cache-control' ,'public, max-age=14400')
  59.     new_response_headers.set('access-control-allow-origin', '*');
  60.     new_response_headers.set('access-control-allow-credentials', true);
  61.     new_response_headers.delete('content-security-policy');
  62.     new_response_headers.delete('content-security-policy-report-only');
  63.     new_response_headers.delete('clear-site-data');

  64.     const content_type = new_response_headers.get('content-type');
  65.     if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
  66.         original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);
  67.     } else {
  68.         original_text = original_response_clone.body
  69.     }

  70.     response = new Response(original_text, {
  71.         status,
  72.         headers: new_response_headers
  73.     })
  74. }
  75. return response;
  76. }

  77. async function replace_response_text(response, upstream_domain, host_name) {
  78. let text = await response.text()

  79. var i, j;
  80. for (i in replace_dict) {
  81.     j = replace_dict[i]
  82.     if (i == '$upstream') {
  83.         i = upstream_domain
  84.     } else if (i == '$custom_domain') {
  85.         i = host_name
  86.     }
  87.    
  88.     if (j == '$upstream') {
  89.         j = upstream_domain
  90.     } else if (j == '$custom_domain') {
  91.         j = host_name
  92.     }

  93.     let re = new RegExp(i, 'g')
  94.     text = text.replace(re, j);
  95. }
  96. return text;
  97. }


  98. async function device_status (user_agent_info) {
  99. var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
  100. var flag = true;
  101. for (var v = 0; v < agents.length; v++) {
  102.     if (user_agent_info.indexOf(agents[v]) > 0) {
  103.         flag = false;
  104.         break;
  105.     }
  106. }
  107. return flag;
  108. }
复制代码
 楼主| 发表于 2023-3-26 02:54:37 | 显示全部楼层
解决了 是referer问题
发表于 2023-3-26 06:57:52 | 显示全部楼层

这几本小说!
我小说站都好象60万本了!
章节好象不过亿!才8千万左右,另一个站小说30多万吧,章节过亿!
 楼主| 发表于 2023-3-26 11:47:55 | 显示全部楼层
gamerock 发表于 2023-3-26 06:57
这几本小说!
我小说站都好象60万本了!
章节好象不过亿!才8千万左右,另一个站小说30多万吧,章节 ...

有地址吗 看看
发表于 2023-4-5 23:12:11 | 显示全部楼层
YinBuLiao 发表于 2023-3-26 02:54
解决了 是referer问题

大佬,referer 修复怎么搞的呀?
 楼主| 发表于 2023-4-5 23:25:15 | 显示全部楼层
liuyinltemp 发表于 2023-4-5 23:12
大佬,referer 修复怎么搞的呀?

我用python写了个反代
发表于 2023-4-5 23:26:04 | 显示全部楼层
YinBuLiao 发表于 2023-4-5 23:25
我用python写了个反代

大佬厉害,我用nginx 反代始终绕不过去防盗链
 楼主| 发表于 2023-4-5 23:33:11 | 显示全部楼层
liuyinltemp 发表于 2023-4-5 23:26
大佬厉害,我用nginx 反代始终绕不过去防盗链


几行就写好了
  1. from flask import Flask, request, send_file
  2. import requests
  3. import io

  4. app = Flask(__name__)

  5. @app.route('/', defaults={'path': ''})
  6. @app.route('/<path:path>')
  7. def proxy(path):
  8.     url = '网址' + path
  9.     headers = {'Referer': 'referer'}
  10.     response = requests.get(url, headers=headers)
  11.     return send_file(io.BytesIO(response.content), mimetype='image/jpeg')

  12. if __name__ == '__main__':
  13.     app.run()
复制代码
发表于 2023-4-5 23:36:04 | 显示全部楼层
这不就是好早以前的偷小说?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-4 15:42 , Processed in 0.070550 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表