MyanmarSwe commited on
Commit
a1e39f2
·
verified ·
1 Parent(s): 35e878d

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +16 -9
main.py CHANGED
@@ -71,13 +71,12 @@ async def download_proxy(request: Request, url: str, key: str = None):
71
  # --- MediaFire ---
72
  if "mediafire.com" in clean_url:
73
  try:
74
- # Player ကလာတဲ့ Request ကို Browser ကလာသလို အသွင်ဖျက်ရန်
75
  browser_headers = {
76
  'User-Agent': ua.random,
77
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
78
  'Accept-Language': 'en-US,en;q=0.5',
 
79
  'Connection': 'keep-alive',
80
- 'Upgrade-Insecure-Requests': '1',
81
  }
82
 
83
  r = await client.get(clean_url, headers=browser_headers)
@@ -85,27 +84,33 @@ async def download_proxy(request: Request, url: str, key: str = None):
85
  raise HTTPException(status_code=r.status_code, detail="MediaFire page access denied")
86
 
87
  target_link = None
88
- # Method 1: Regex for Direct Download Link
89
  match = re.search(r"https?://download[0-9]+\.mediafire\.com/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+/[^\s'\"]+", r.text)
90
  if match:
91
  target_link = match.group(0).replace('"', '').replace("'", "")
92
 
93
- # Method 2: BS4 Fallback
94
  if not target_link:
95
  soup = BeautifulSoup(r.text, 'html.parser')
96
  btn = soup.find('a', {'id': 'downloadButton'})
97
  if btn and btn.get('href'):
98
  target_link = btn.get('href')
99
 
 
 
 
 
 
 
 
100
  if not target_link:
101
  raise HTTPException(status_code=404, detail="Direct link extraction failed")
102
 
103
- # Direct Link ကို Stream လုပ်တဲ့အခါ Referer ထည့်ပေးခြင်းဖြင့် 500 Error ကို ကျော်လွှားနိုင်သည်
104
  return await stream_file(target_link, range_header, referer=clean_url)
105
 
106
  except Exception as e:
107
  print(f"MediaFire Error: {str(e)}")
108
- raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}")
109
 
110
  # --- Google Drive ---
111
  elif "drive.google.com" in clean_url:
@@ -139,25 +144,27 @@ async def download_proxy(request: Request, url: str, key: str = None):
139
  async def stream_file(target_url, range_header, referer=None):
140
  headers = {'User-Agent': ua.random}
141
  if range_header: headers['Range'] = range_header
142
- if referer: headers['Referer'] = referer # MediaFire အတွက် အရေးကြီးသည်
143
 
144
  try:
145
  req = client.build_request("GET", target_url, headers=headers)
146
  r = await client.send(req, stream=True)
147
- # အကယ်၍ မူရင်း Server က 403/500 ပြန်လာလျှင် Proxy ကနေ Error ပြန်ရန်
148
  if r.status_code >= 400:
149
  await r.aclose()
150
- raise HTTPException(status_code=r.status_code, detail="Remote server rejected the request")
151
  return await process_response(r)
152
  except Exception as e:
 
153
  raise HTTPException(status_code=500, detail=str(e))
154
 
155
  async def process_response(r):
 
156
  safe_headers = [
157
  'content-type', 'content-length', 'content-range',
158
  'accept-ranges', 'content-disposition', 'cache-control'
159
  ]
160
  response_headers = {n: v for n, v in r.headers.items() if n.lower() in safe_headers}
 
161
  if 'accept-ranges' not in [k.lower() for k in response_headers.keys()]:
162
  response_headers['Accept-Ranges'] = 'bytes'
163
 
 
71
  # --- MediaFire ---
72
  if "mediafire.com" in clean_url:
73
  try:
 
74
  browser_headers = {
75
  'User-Agent': ua.random,
76
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
77
  'Accept-Language': 'en-US,en;q=0.5',
78
+ 'Referer': 'https://www.mediafire.com/',
79
  'Connection': 'keep-alive',
 
80
  }
81
 
82
  r = await client.get(clean_url, headers=browser_headers)
 
84
  raise HTTPException(status_code=r.status_code, detail="MediaFire page access denied")
85
 
86
  target_link = None
87
+ # Method 1: Regex
88
  match = re.search(r"https?://download[0-9]+\.mediafire\.com/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+/[^\s'\"]+", r.text)
89
  if match:
90
  target_link = match.group(0).replace('"', '').replace("'", "")
91
 
92
+ # Method 2: BS4
93
  if not target_link:
94
  soup = BeautifulSoup(r.text, 'html.parser')
95
  btn = soup.find('a', {'id': 'downloadButton'})
96
  if btn and btn.get('href'):
97
  target_link = btn.get('href')
98
 
99
+ # --- အရေးကြီးသောပြင်ဆင်ချက်: Relative URL ကို Absolute URL သို့ပြောင်းခြင်း ---
100
+ if target_link:
101
+ if target_link.startswith("//"):
102
+ target_link = f"https:{target_link}"
103
+ elif target_link.startswith("/"):
104
+ target_link = f"https://www.mediafire.com{target_link}"
105
+
106
  if not target_link:
107
  raise HTTPException(status_code=404, detail="Direct link extraction failed")
108
 
 
109
  return await stream_file(target_link, range_header, referer=clean_url)
110
 
111
  except Exception as e:
112
  print(f"MediaFire Error: {str(e)}")
113
+ raise HTTPException(status_code=500, detail=str(e))
114
 
115
  # --- Google Drive ---
116
  elif "drive.google.com" in clean_url:
 
144
  async def stream_file(target_url, range_header, referer=None):
145
  headers = {'User-Agent': ua.random}
146
  if range_header: headers['Range'] = range_header
147
+ if referer: headers['Referer'] = referer
148
 
149
  try:
150
  req = client.build_request("GET", target_url, headers=headers)
151
  r = await client.send(req, stream=True)
 
152
  if r.status_code >= 400:
153
  await r.aclose()
154
+ raise HTTPException(status_code=r.status_code, detail=f"Remote server returned {r.status_code}")
155
  return await process_response(r)
156
  except Exception as e:
157
+ print(f"Stream Error: {e}")
158
  raise HTTPException(status_code=500, detail=str(e))
159
 
160
  async def process_response(r):
161
+ # Player များအတွက် မရှိမဖြစ်လိုအပ်သော Header များ
162
  safe_headers = [
163
  'content-type', 'content-length', 'content-range',
164
  'accept-ranges', 'content-disposition', 'cache-control'
165
  ]
166
  response_headers = {n: v for n, v in r.headers.items() if n.lower() in safe_headers}
167
+
168
  if 'accept-ranges' not in [k.lower() for k in response_headers.keys()]:
169
  response_headers['Accept-Ranges'] = 'bytes'
170