cobweb-launcher 3.1.32__py3-none-any.whl → 3.1.33__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cobweb/base/request.py +33 -31
- {cobweb_launcher-3.1.32.dist-info → cobweb_launcher-3.1.33.dist-info}/METADATA +1 -1
- {cobweb_launcher-3.1.32.dist-info → cobweb_launcher-3.1.33.dist-info}/RECORD +6 -6
- {cobweb_launcher-3.1.32.dist-info → cobweb_launcher-3.1.33.dist-info}/LICENSE +0 -0
- {cobweb_launcher-3.1.32.dist-info → cobweb_launcher-3.1.33.dist-info}/WHEEL +0 -0
- {cobweb_launcher-3.1.32.dist-info → cobweb_launcher-3.1.33.dist-info}/top_level.txt +0 -0
cobweb/base/request.py
CHANGED
@@ -311,6 +311,7 @@ class Request:
|
|
311
311
|
"""
|
312
312
|
self.scheme = None
|
313
313
|
self.netloc = None
|
314
|
+
self.response = None
|
314
315
|
self.detector_info = None
|
315
316
|
self.content_length = None
|
316
317
|
self._validate_url(url)
|
@@ -469,31 +470,32 @@ class Request:
|
|
469
470
|
_end = min(downloaded + chunk_size - 1, self.total_size - 1)
|
470
471
|
detect_settings.setdefault("headers", {})['Range'] = f"bytes={_start}-{_end}"
|
471
472
|
|
472
|
-
response = requests.request(
|
473
|
+
self.response = requests.request(
|
473
474
|
method=self.method,
|
474
475
|
url=self.url,
|
475
476
|
**detect_settings
|
476
477
|
)
|
477
478
|
|
478
|
-
if response.status_code == 206:
|
479
|
-
chunk_data = response.content
|
479
|
+
if self.response.status_code == 206:
|
480
|
+
chunk_data = self.response.content
|
480
481
|
yield chunk_data
|
481
482
|
downloaded += len(chunk_data)
|
482
483
|
retry_count = 0 # 重置重试计数
|
483
484
|
logging.info(f"下载进度: {downloaded}/{self.total_size} ({downloaded / self.total_size * 100:.1f}%)")
|
484
485
|
|
485
|
-
elif response.status_code == 416: # Range Not Satisfiable
|
486
|
+
elif self.response.status_code == 416: # Range Not Satisfiable
|
486
487
|
logging.info("Range请求超出范围")
|
487
488
|
break
|
488
489
|
|
489
490
|
else:
|
490
|
-
logging.debug(f"Range请求失败: {response.status_code}")
|
491
|
+
logging.debug(f"Range请求失败: {self.response.status_code}")
|
491
492
|
if retry_count < max_retries:
|
492
493
|
retry_count += 1
|
493
494
|
time.sleep(0.5)
|
494
495
|
continue
|
495
496
|
|
496
|
-
response.close()
|
497
|
+
self.response.close()
|
498
|
+
self.response = None
|
497
499
|
|
498
500
|
def detect_accept_ranges(self) -> bool:
|
499
501
|
detect_settings = self.request_settings.copy()
|
@@ -505,38 +507,38 @@ class Request:
|
|
505
507
|
raise ValueError("HTTP状态码错误")
|
506
508
|
|
507
509
|
self.content_length = int(head_response.headers.get('content-length', 0))
|
508
|
-
accept_ranges = str(head_response.headers.get('accept-ranges')).lower()
|
509
|
-
|
510
|
+
# accept_ranges = str(head_response.headers.get('accept-ranges')).lower()
|
510
511
|
supports_range = True
|
511
512
|
|
512
513
|
# 根据检测结果使用不同下载方式
|
513
|
-
if accept_ranges == 'none' or not self.content_length:
|
514
|
-
|
515
|
-
else:
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
514
|
+
# if accept_ranges == 'none' or not self.content_length:
|
515
|
+
# supports_range = False
|
516
|
+
# else:
|
517
|
+
test_range_settings = detect_settings.copy()
|
518
|
+
test_range_settings.setdefault("headers", {})['Range'] = "bytes=0-63"
|
519
|
+
test_response = requests.request(
|
520
|
+
method=self.method,
|
521
|
+
url=self.url,
|
522
|
+
**test_range_settings
|
523
|
+
)
|
524
|
+
head_data = test_response.content
|
525
|
+
content_type = test_response.headers.get("Content-Type")
|
525
526
|
|
526
|
-
|
527
|
-
|
528
|
-
logging.debug(f"⚠️ Range请求返回长度不匹配: 期望64, 实际{len(head_data)}")
|
529
|
-
supports_range = False
|
530
|
-
else:
|
531
|
-
detector = FileTypeDetector()
|
532
|
-
self.detector_info = detector.get_detailed_info(
|
533
|
-
url=self.url, content_type=content_type, data=head_data
|
534
|
-
)
|
535
|
-
else:
|
527
|
+
if test_response.status_code == 206:
|
528
|
+
if len(head_data) != 64:
|
536
529
|
supports_range = False
|
530
|
+
self.response = test_response
|
531
|
+
logging.debug(f"⚠️ Range请求返回长度不匹配: 期望64, 实际{len(head_data)}")
|
532
|
+
head_data = head_data[:64]
|
537
533
|
|
538
|
-
|
534
|
+
detector = FileTypeDetector()
|
535
|
+
self.detector_info = detector.get_detailed_info(
|
536
|
+
url=self.url, content_type=content_type, data=head_data
|
537
|
+
)
|
538
|
+
else:
|
539
|
+
supports_range = False
|
539
540
|
|
541
|
+
test_response.close()
|
540
542
|
return supports_range
|
541
543
|
|
542
544
|
def detect_file_type(self) -> Dict[str, Any]:
|
@@ -5,7 +5,7 @@ cobweb/base/__init__.py,sha256=NanSxJr0WsqjqCNOQAlxlkt-vQEsERHYBzacFC057oI,222
|
|
5
5
|
cobweb/base/common_queue.py,sha256=hYdaM70KrWjvACuLKaGhkI2VqFCnd87NVvWzmnfIg8Q,1423
|
6
6
|
cobweb/base/item.py,sha256=1bS4U_3vzI2jzSSeoEbLoLT_5CfgLPopWiEYtaahbvw,1674
|
7
7
|
cobweb/base/logger.py,sha256=Vsg1bD4LXW91VgY-ANsmaUu-mD88hU_WS83f7jX3qF8,2011
|
8
|
-
cobweb/base/request.py,sha256=
|
8
|
+
cobweb/base/request.py,sha256=NOGoheNTnFJV3AuQi5Gi54wVtMDQf1Fw6MsuBslPH3k,21004
|
9
9
|
cobweb/base/response.py,sha256=L3sX2PskV744uz3BJ8xMuAoAfGCeh20w8h0Cnd9vLo0,11377
|
10
10
|
cobweb/base/seed.py,sha256=ddaWCq_KaWwpmPl1CToJlfCxEEnoJ16kjo6azJs9uls,5000
|
11
11
|
cobweb/base/task_queue.py,sha256=2MqGpHGNmK5B-kqv7z420RWyihzB9zgDHJUiLsmtzOI,6402
|
@@ -34,8 +34,8 @@ cobweb/utils/decorators.py,sha256=ZwVQlz-lYHgXgKf9KRCp15EWPzTDdhoikYUNUCIqNeM,11
|
|
34
34
|
cobweb/utils/dotting.py,sha256=L-jGSApdnFIP4jUWH6p5qIme0aJ1vyDrxAx8wOJWvcs,1960
|
35
35
|
cobweb/utils/oss.py,sha256=wmToIIVNO8nCQVRmreVaZejk01aCWS35e1NV6cr0yGI,4192
|
36
36
|
cobweb/utils/tools.py,sha256=14TCedqt07m4z6bCnFAsITOFixeGr8V3aOKk--L7Cr0,879
|
37
|
-
cobweb_launcher-3.1.
|
38
|
-
cobweb_launcher-3.1.
|
39
|
-
cobweb_launcher-3.1.
|
40
|
-
cobweb_launcher-3.1.
|
41
|
-
cobweb_launcher-3.1.
|
37
|
+
cobweb_launcher-3.1.33.dist-info/LICENSE,sha256=z1rxSIGOyzcSb3orZxFPxzx-0C1vTocmswqBNxpKfEk,1063
|
38
|
+
cobweb_launcher-3.1.33.dist-info/METADATA,sha256=rduVZ1FDZbCFRdSYWwap8vXp9H85tEj78KgjONWQFwo,6051
|
39
|
+
cobweb_launcher-3.1.33.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92
|
40
|
+
cobweb_launcher-3.1.33.dist-info/top_level.txt,sha256=4GETBGNsKqiCUezmT-mJn7tjhcDlu7nLIV5gGgHBW4I,7
|
41
|
+
cobweb_launcher-3.1.33.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|