Greasy Fork is available in English.

123pandownload

123 Cloud Drive Unlimited Flow

  1. // ==UserScript==
  2. // @name 123pandownload
  3. // @namespace https://github.com/Bao-qing/123pan
  4. // @version 0.3
  5. // @description 123 Cloud Drive Unlimited Flow
  6. // @match https://www.123pan.com/*
  7. // @match https://www.123pan.cn/*
  8. // @match https://www.123865.com/*
  9. // @match https://www.123684.com/*
  10. // @grant none
  11. // @author Qing
  12. // @license Apache Licence 2.0
  13. // ==/UserScript==
  14.  
  15. (function () {
  16. // 重写 XMLHttpRequest
  17. const originalXHR = window.XMLHttpRequest;
  18.  
  19. function newXHR() {
  20. const realXHR = new originalXHR();
  21.  
  22. realXHR.open = function (method, url, async, user, password) {
  23. this._url = url; // 记录请求的 URL
  24. return originalXHR.prototype.open.apply(this, arguments);
  25. };
  26.  
  27. realXHR.setRequestHeader = function (header, value) {
  28. let headers = {
  29. "user-agent": "123pan/v2.4.0(Android_7.1.2;Xiaomi)",
  30. //"loginuuid": generateUUIDHex(),
  31. "platform": "android",
  32. "app-version": "61",
  33. "x-app-version": "2.4.0"
  34. }
  35. // 如果header在列表中,则修改
  36. if (header.toLowerCase() in headers) {
  37. value = headers[header.toLowerCase()];
  38. } else {
  39. console.log('header:', header);
  40. }
  41.  
  42. return originalXHR.prototype.setRequestHeader.apply(this, arguments);
  43. };
  44.  
  45. // 拦截响应内容,修改 DownloadUrl以适应网页端下载
  46. realXHR.send = function () {
  47. const xhrInstance = this;
  48. this.addEventListener('readystatechange', function () {
  49. let origin_url;
  50. let new_url_no_redirect;
  51. let base64data;
  52. if (xhrInstance.readyState === 4 && xhrInstance.status === 200) {
  53. // 解析响应的 JSON
  54. let responseText = xhrInstance.responseText;
  55. let responseJSON = JSON.parse(responseText);
  56. console.log('Original Response:', responseJSON);
  57.  
  58. // 修改 DownloadUrl
  59. if (responseJSON.data && responseJSON.data.DownloadUrl) {
  60. origin_url = responseJSON.data.DownloadUrl;
  61. new_url_no_redirect = origin_url + "&auto_redirect=0";
  62. base64data = btoa(new_url_no_redirect);
  63. responseJSON.data.DownloadUrl = "https://web-pro2.123952.com/download-v2/?params=" + base64data + "&is_s3=0";
  64. console.log('Modified DownloadUrl:', responseJSON.data.DownloadUrl);
  65. }
  66.  
  67. // 将修改后的 JSON 转为字符串
  68. let modifiedResponseText = JSON.stringify(responseJSON);
  69.  
  70. // 使用 defineProperty 重写 responseText
  71. Object.defineProperty(xhrInstance, 'responseText', {
  72. get: function () {
  73. return modifiedResponseText;
  74. }
  75. });
  76. console.log('Modified Response:', modifiedResponseText);
  77. }
  78. });
  79.  
  80. return originalXHR.prototype.send.apply(this, arguments);
  81. };
  82.  
  83. return realXHR;
  84. }
  85.  
  86. window.XMLHttpRequest = newXHR;
  87. })();