11import { base64Decode } from '../libs_drpy/crypto-util.js' ;
22import '../utils/random-http-ua.js'
3+ import { keysToLowerCase } from '../utils/utils.js' ;
34import http from 'http' ;
45import https from 'https' ;
56import axios from 'axios' ;
@@ -110,7 +111,14 @@ function proxyStreamMedia(videoUrl, headers, reply) {
110111
111112
112113// Helper function for range-based chunk downloading
113- async function fetchStream ( url , headers , start , end , randUa ) {
114+ async function fetchStream ( url , userHeaders , start , end , randUa ) {
115+ const headers = keysToLowerCase ( {
116+ ...userHeaders ,
117+ } ) ;
118+ // 添加accept属性防止获取网页源码编码不正确问题
119+ if ( ! Object . keys ( headers ) . includes ( 'accept' ) ) {
120+ headers [ 'accept' ] = '*/*' ;
121+ }
114122 try {
115123 const response = await _axios . get ( url , {
116124 headers : {
@@ -148,15 +156,23 @@ async function proxyStreamMediaMulti(mediaUrl, reqHeaders, request, reply, threa
148156 } )
149157 : reqHeaders ;
150158
159+ const headers = keysToLowerCase ( {
160+ ...randHeaders ,
161+ } ) ;
162+ // 添加accept属性防止获取网页源码编码不正确问题
163+ if ( ! Object . keys ( headers ) . includes ( 'accept' ) ) {
164+ headers [ 'accept' ] = '*/*' ;
165+ }
151166 // 检查请求头中是否包含 Cookie
152167 const hasCookie = Object . keys ( randHeaders ) . some ( key => key . toLowerCase ( ) === 'cookie' ) ;
153168 // console.log(`[proxyStreamMediaMulti] Checking for Cookie in headers: ${hasCookie}`);
154169
170+
155171 try {
156172 if ( ! hasCookie ) {
157173 // 优先尝试 HEAD 请求
158174 // console.log('[proxyStreamMediaMulti] Attempting HEAD request to fetch content-length...');
159- const headResponse = await _axios . head ( mediaUrl , { headers : randHeaders } ) ;
175+ const headResponse = await _axios . head ( mediaUrl , { headers : headers } ) ;
160176 initialHeaders = headResponse . headers ;
161177 contentLength = parseInt ( initialHeaders [ 'content-length' ] , 10 ) ;
162178 console . log ( `[proxyStreamMediaMulti] HEAD request successful, content-length: ${ contentLength } ` ) ;
@@ -169,7 +185,7 @@ async function proxyStreamMediaMulti(mediaUrl, reqHeaders, request, reply, threa
169185 // 使用 HTTP Range 请求获取 content-length
170186 try {
171187 // console.log('[proxyStreamMediaMulti] Attempting Range GET request to fetch content-length...');
172- const rangeHeaders = { ...randHeaders , Range : 'bytes=0-1' } ;
188+ const rangeHeaders = { ...headers , Range : 'bytes=0-1' } ;
173189 const rangeResponse = await _axios . get ( mediaUrl , {
174190 headers : rangeHeaders ,
175191 responseType : 'stream' ,
@@ -190,11 +206,11 @@ async function proxyStreamMediaMulti(mediaUrl, reqHeaders, request, reply, threa
190206 rangeResponse . data . destroy ( ) ;
191207 } catch ( rangeError ) {
192208 console . error ( '[proxyStreamMediaMulti] Range GET request failed:' , rangeError . message ) ;
193- console . log ( randHeaders ) ;
209+ console . log ( '[proxyStreamMediaMulti] headers:' , headers ) ;
194210 // 使用 GET 请求获取 content-length
195211 // console.log('[proxyStreamMediaMulti] Falling back to full GET request to fetch content-length...');
196212 const getResponse = await _axios . get ( mediaUrl , {
197- headers : randHeaders ,
213+ headers : headers ,
198214 responseType : 'stream' ,
199215 } ) ;
200216 initialHeaders = getResponse . headers ;
0 commit comments