mirror of
https://github.com/JoeanAmier/XHS-Downloader.git
synced 2026-03-22 06:57:16 +08:00
perf: 优化重定向链接获取逻辑
1. 更新 chunk 参数默认值 2. 更新配置文件参数说明 Closes #138 Closes #139
This commit is contained in:
@@ -287,7 +287,7 @@ async def example():
|
|||||||
<td align="center">chunk</td>
|
<td align="center">chunk</td>
|
||||||
<td align="center">int</td>
|
<td align="center">int</td>
|
||||||
<td align="center">下载文件时,每次从服务器获取的数据块大小,单位:字节</td>
|
<td align="center">下载文件时,每次从服务器获取的数据块大小,单位:字节</td>
|
||||||
<td align="center">1048576(1 MB)</td>
|
<td align="center">2097152(2 MB)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center">max_retry</td>
|
<td align="center">max_retry</td>
|
||||||
@@ -332,6 +332,12 @@ async def example():
|
|||||||
<td align="center">false</td>
|
<td align="center">false</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td align="center">download_record</td>
|
||||||
|
<td align="center">bool</td>
|
||||||
|
<td align="center">是否记录下载成功的作品 ID,如果开启,程序将会自动跳过下载存在记录的作品</td>
|
||||||
|
<td align="center">true</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td align="center">language</td>
|
<td align="center">language</td>
|
||||||
<td align="center">str</td>
|
<td align="center">str</td>
|
||||||
<td align="center">设置程序语言,目前支持:<code>zh_CN</code>、<code>en_GB</code></td>
|
<td align="center">设置程序语言,目前支持:<code>zh_CN</code>、<code>en_GB</code></td>
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ async def example():
|
|||||||
<td align="center">chunk</td>
|
<td align="center">chunk</td>
|
||||||
<td align="center">int</td>
|
<td align="center">int</td>
|
||||||
<td align="center">Size of data chunk to fetch from the server each time when downloading files, in bytes</td>
|
<td align="center">Size of data chunk to fetch from the server each time when downloading files, in bytes</td>
|
||||||
<td align="center">1048576(1 MB)</td>
|
<td align="center">2097152(2 MB)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center">max_retry</td>
|
<td align="center">max_retry</td>
|
||||||
@@ -336,6 +336,12 @@ async def example():
|
|||||||
<td align="center">false</td>
|
<td align="center">false</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td align="center">download_record</td>
|
||||||
|
<td align="center">bool</td>
|
||||||
|
<td align="center">Do record the ID of successfully downloaded works? If enabled, the program will automatically skip downloading works with records</td>
|
||||||
|
<td align="center">true</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td align="center">language</td>
|
<td align="center">language</td>
|
||||||
<td align="center">str</td>
|
<td align="center">str</td>
|
||||||
<td align="center">Set program language. Currently supported: <code>zh_CN</code>, <code>en_GB</code></td>
|
<td align="center">Set program language. Currently supported: <code>zh_CN</code>, <code>en_GB</code></td>
|
||||||
|
|||||||
@@ -24,14 +24,16 @@ class Html:
|
|||||||
log=None,
|
log=None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> str:
|
) -> str:
|
||||||
|
headers = self.select_headers(url, )
|
||||||
try:
|
try:
|
||||||
response = await self.client.get(
|
match content:
|
||||||
url,
|
case True:
|
||||||
headers=self.select_headers(url, ),
|
response = await self.__request_url_get(url, headers, **kwargs, )
|
||||||
**kwargs,
|
response.raise_for_status()
|
||||||
)
|
return response.text
|
||||||
response.raise_for_status()
|
case False:
|
||||||
return response.text if content else str(response.url)
|
response = await self.__request_url_head(url, headers, **kwargs, )
|
||||||
|
return str(response.url)
|
||||||
except HTTPError as error:
|
except HTTPError as error:
|
||||||
logging(log, str(error), ERROR)
|
logging(log, str(error), ERROR)
|
||||||
logging(
|
logging(
|
||||||
@@ -43,4 +45,18 @@ class Html:
|
|||||||
return bytes(url, "utf-8").decode("unicode_escape")
|
return bytes(url, "utf-8").decode("unicode_escape")
|
||||||
|
|
||||||
def select_headers(self, url: str) -> dict:
|
def select_headers(self, url: str) -> dict:
|
||||||
return self.blank_headers if "discovery/item" in url else self.headers
|
return self.headers if "explore" in url else self.blank_headers
|
||||||
|
|
||||||
|
async def __request_url_head(self, url: str, headers: dict, **kwargs, ):
|
||||||
|
return await self.client.head(
|
||||||
|
url,
|
||||||
|
headers=headers,
|
||||||
|
**kwargs,
|
||||||
|
)
|
||||||
|
|
||||||
|
async def __request_url_get(self, url: str, headers: dict, **kwargs, ):
|
||||||
|
return await self.client.get(
|
||||||
|
url,
|
||||||
|
headers=headers,
|
||||||
|
**kwargs,
|
||||||
|
)
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class Settings:
|
|||||||
"cookie": "",
|
"cookie": "",
|
||||||
"proxy": None,
|
"proxy": None,
|
||||||
"timeout": 10,
|
"timeout": 10,
|
||||||
"chunk": 1024 * 1024,
|
"chunk": 1024 * 1024 * 2,
|
||||||
"max_retry": 5,
|
"max_retry": 5,
|
||||||
"record_data": False,
|
"record_data": False,
|
||||||
"image_format": "PNG",
|
"image_format": "PNG",
|
||||||
|
|||||||
Reference in New Issue
Block a user