[1m[32m==>[m[1m Building on centiskorch[m
[1m[32m==>[m[1m Checking for remote environment...[m
[1m[32m==>[m[1m Syncing package to remote host...[m
sending incremental file list
./
.SRCINFO
1,081 100% 0.00kB/s 0:00:00
1,081 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=12/14)
.nvchecker.toml
90 100% 87.89kB/s 0:00:00
90 100% 87.89kB/s 0:00:00 (xfr#2, to-chk=11/14)
LICENSE
646 100% 630.86kB/s 0:00:00
646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=10/14)
PKGBUILD
1,683 100% 1.61MB/s 0:00:00
1,683 100% 1.61MB/s 0:00:00 (xfr#4, to-chk=9/14)
REUSE.toml
517 100% 504.88kB/s 0:00:00
517 100% 504.88kB/s 0:00:00 (xfr#5, to-chk=8/14)
certs.patch
484 100% 472.66kB/s 0:00:00
484 100% 472.66kB/s 0:00:00 (xfr#6, to-chk=7/14)
python-requests-2.32.5-1.log
829 100% 809.57kB/s 0:00:00
829 100% 809.57kB/s 0:00:00 (xfr#7, to-chk=6/14)
LICENSES/
LICENSES/0BSD.txt -> ../LICENSE
LICENSES/Apache-2.0.txt
10,280 100% 9.80MB/s 0:00:00
10,280 100% 9.80MB/s 0:00:00 (xfr#8, to-chk=2/14)
keys/
keys/pgp/
keys/pgp/87227E29AD9CFF5CFAC3EA6A44D3FF97B80DC864.asc
8,513 100% 8.12MB/s 0:00:00
8,513 100% 8.12MB/s 0:00:00 (xfr#9, to-chk=0/14)
sent 13,815 bytes received 243 bytes 28,116.00 bytes/sec
total size is 23,502 speedup is 1.67
[1m[32m==>[m[1m Ensuring required PGP keys are present...[m
[1m[34m ->[m[1m Checking for 87227E29AD9CFF5CFAC3EA6A44D3FF97B80DC864...[m
[1m[32m==>[m[1m Running pkgctl build --arch riscv64 --repo extra on remote host...[m
[1m[33m==> WARNING:[m[1m unsupported architecture: riscv64[m
[1m[32m==>[m[1m Building python-requests[m
[1m[34m ->[m[1m repo: extra[m
[1m[34m ->[m[1m arch: riscv64[m
[1m[34m ->[m[1m worker: felix-3[m
[1m[32m==>[m[1m Building python-requests for [extra] (riscv64)[m
[22;2t]2;🔵 Container arch-nspawn-2005945 on centiskorch.felixc.at\[?25l:: Synchronizing package databases...
core downloading...
extra downloading...
:: Starting full system upgrade...
there is nothing to do
[?25h[0m[J[23;2t[1m[32m==>[m[1m Building in chroot for [extra] (riscv64)...[m
[1m[32m==>[m[1m Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix-3]...[m[1mdone[m
[1m[32m==>[m[1m Making package: python-requests 2.32.5-1 (Thu Aug 21 14:16:44 2025)[m
[1m[32m==>[m[1m Retrieving sources...[m
[1m[34m ->[m[1m Cloning requests git repo...[m
Cloning into bare repository '/home/felix/packages/python-requests/requests'...
remote: Enumerating objects: 41053, done.[K
remote: Counting objects: 0% (1/164)[K
remote: Counting objects: 1% (2/164)[K
remote: Counting objects: 2% (4/164)[K
remote: Counting objects: 3% (5/164)[K
remote: Counting objects: 4% (7/164)[K
remote: Counting objects: 5% (9/164)[K
remote: Counting objects: 6% (10/164)[K
remote: Counting objects: 7% (12/164)[K
remote: Counting objects: 8% (14/164)[K
remote: Counting objects: 9% (15/164)[K
remote: Counting objects: 10% (17/164)[K
remote: Counting objects: 11% (19/164)[K
remote: Counting objects: 12% (20/164)[K
remote: Counting objects: 13% (22/164)[K
remote: Counting objects: 14% (23/164)[K
remote: Counting objects: 15% (25/164)[K
remote: Counting objects: 16% (27/164)[K
remote: Counting objects: 17% (28/164)[K
remote: Counting objects: 18% (30/164)[K
remote: Counting objects: 19% (32/164)[K
remote: Counting objects: 20% (33/164)[K
remote: Counting objects: 21% (35/164)[K
remote: Counting objects: 22% (37/164)[K
remote: Counting objects: 23% (38/164)[K
remote: Counting objects: 24% (40/164)[K
remote: Counting objects: 25% (41/164)[K
remote: Counting objects: 26% (43/164)[K
remote: Counting objects: 27% (45/164)[K
remote: Counting objects: 28% (46/164)[K
remote: Counting objects: 29% (48/164)[K
remote: Counting objects: 30% (50/164)[K
remote: Counting objects: 31% (51/164)[K
remote: Counting objects: 32% (53/164)[K
remote: Counting objects: 33% (55/164)[K
remote: Counting objects: 34% (56/164)[K
remote: Counting objects: 35% (58/164)[K
remote: Counting objects: 36% (60/164)[K
remote: Counting objects: 37% (61/164)[K
remote: Counting objects: 38% (63/164)[K
remote: Counting objects: 39% (64/164)[K
remote: Counting objects: 40% (66/164)[K
remote: Counting objects: 41% (68/164)[K
remote: Counting objects: 42% (69/164)[K
remote: Counting objects: 43% (71/164)[K
remote: Counting objects: 44% (73/164)[K
remote: Counting objects: 45% (74/164)[K
remote: Counting objects: 46% (76/164)[K
remote: Counting objects: 47% (78/164)[K
remote: Counting objects: 48% (79/164)[K
remote: Counting objects: 49% (81/164)[K
remote: Counting objects: 50% (82/164)[K
remote: Counting objects: 51% (84/164)[K
remote: Counting objects: 52% (86/164)[K
remote: Counting objects: 53% (87/164)[K
remote: Counting objects: 54% (89/164)[K
remote: Counting objects: 55% (91/164)[K
remote: Counting objects: 56% (92/164)[K
remote: Counting objects: 57% (94/164)[K
remote: Counting objects: 58% (96/164)[K
remote: Counting objects: 59% (97/164)[K
remote: Counting objects: 60% (99/164)[K
remote: Counting objects: 61% (101/164)[K
remote: Counting objects: 62% (102/164)[K
remote: Counting objects: 63% (104/164)[K
remote: Counting objects: 64% (105/164)[K
remote: Counting objects: 65% (107/164)[K
remote: Counting objects: 66% (109/164)[K
remote: Counting objects: 67% (110/164)[K
remote: Counting objects: 68% (112/164)[K
remote: Counting objects: 69% (114/164)[K
remote: Counting objects: 70% (115/164)[K
remote: Counting objects: 71% (117/164)[K
remote: Counting objects: 72% (119/164)[K
remote: Counting objects: 73% (120/164)[K
remote: Counting objects: 74% (122/164)[K
remote: Counting objects: 75% (123/164)[K
remote: Counting objects: 76% (125/164)[K
remote: Counting objects: 77% (127/164)[K
remote: Counting objects: 78% (128/164)[K
remote: Counting objects: 79% (130/164)[K
remote: Counting objects: 80% (132/164)[K
remote: Counting objects: 81% (133/164)[K
remote: Counting objects: 82% (135/164)[K
remote: Counting objects: 83% (137/164)[K
remote: Counting objects: 84% (138/164)[K
remote: Counting objects: 85% (140/164)[K
remote: Counting objects: 86% (142/164)[K
remote: Counting objects: 87% (143/164)[K
remote: Counting objects: 88% (145/164)[K
remote: Counting objects: 89% (146/164)[K
remote: Counting objects: 90% (148/164)[K
remote: Counting objects: 91% (150/164)[K
remote: Counting objects: 92% (151/164)[K
remote: Counting objects: 93% (153/164)[K
remote: Counting objects: 94% (155/164)[K
remote: Counting objects: 95% (156/164)[K
remote: Counting objects: 96% (158/164)[K
remote: Counting objects: 97% (160/164)[K
remote: Counting objects: 98% (161/164)[K
remote: Counting objects: 99% (163/164)[K
remote: Counting objects: 100% (164/164)[K
remote: Counting objects: 100% (164/164), done.[K
remote: Compressing objects: 0% (1/123)[K
remote: Compressing objects: 1% (2/123)[K
remote: Compressing objects: 2% (3/123)[K
remote: Compressing objects: 3% (4/123)[K
remote: Compressing objects: 4% (5/123)[K
remote: Compressing objects: 5% (7/123)[K
remote: Compressing objects: 6% (8/123)[K
remote: Compressing objects: 7% (9/123)[K
remote: Compressing objects: 8% (10/123)[K
remote: Compressing objects: 9% (12/123)[K
remote: Compressing objects: 10% (13/123)[K
remote: Compressing objects: 11% (14/123)[K
remote: Compressing objects: 12% (15/123)[K
remote: Compressing objects: 13% (16/123)[K
remote: Compressing objects: 14% (18/123)[K
remote: Compressing objects: 15% (19/123)[K
remote: Compressing objects: 16% (20/123)[K
remote: Compressing objects: 17% (21/123)[K
remote: Compressing objects: 18% (23/123)[K
remote: Compressing objects: 19% (24/123)[K
remote: Compressing objects: 20% (25/123)[K
remote: Compressing objects: 21% (26/123)[K
remote: Compressing objects: 22% (28/123)[K
remote: Compressing objects: 23% (29/123)[K
remote: Compressing objects: 24% (30/123)[K
remote: Compressing objects: 25% (31/123)[K
remote: Compressing objects: 26% (32/123)[K
remote: Compressing objects: 27% (34/123)[K
remote: Compressing objects: 28% (35/123)[K
remote: Compressing objects: 29% (36/123)[K
remote: Compressing objects: 30% (37/123)[K
remote: Compressing objects: 31% (39/123)[K
remote: Compressing objects: 32% (40/123)[K
remote: Compressing objects: 33% (41/123)[K
remote: Compressing objects: 34% (42/123)[K
remote: Compressing objects: 35% (44/123)[K
remote: Compressing objects: 36% (45/123)[K
remote: Compressing objects: 37% (46/123)[K
remote: Compressing objects: 38% (47/123)[K
remote: Compressing objects: 39% (48/123)[K
remote: Compressing objects: 40% (50/123)[K
remote: Compressing objects: 41% (51/123)[K
remote: Compressing objects: 42% (52/123)[K
remote: Compressing objects: 43% (53/123)[K
remote: Compressing objects: 44% (55/123)[K
remote: Compressing objects: 45% (56/123)[K
remote: Compressing objects: 46% (57/123)[K
remote: Compressing objects: 47% (58/123)[K
remote: Compressing objects: 48% (60/123)[K
remote: Compressing objects: 49% (61/123)[K
remote: Compressing objects: 50% (62/123)[K
remote: Compressing objects: 51% (63/123)[K
remote: Compressing objects: 52% (64/123)[K
remote: Compressing objects: 53% (66/123)[K
remote: Compressing objects: 54% (67/123)[K
remote: Compressing objects: 55% (68/123)[K
remote: Compressing objects: 56% (69/123)[K
remote: Compressing objects: 57% (71/123)[K
remote: Compressing objects: 58% (72/123)[K
remote: Compressing objects: 59% (73/123)[K
remote: Compressing objects: 60% (74/123)[K
remote: Compressing objects: 61% (76/123)[K
remote: Compressing objects: 62% (77/123)[K
remote: Compressing objects: 63% (78/123)[K
remote: Compressing objects: 64% (79/123)[K
remote: Compressing objects: 65% (80/123)[K
remote: Compressing objects: 66% (82/123)[K
remote: Compressing objects: 67% (83/123)[K
remote: Compressing objects: 68% (84/123)[K
remote: Compressing objects: 69% (85/123)[K
remote: Compressing objects: 70% (87/123)[K
remote: Compressing objects: 71% (88/123)[K
remote: Compressing objects: 72% (89/123)[K
remote: Compressing objects: 73% (90/123)[K
remote: Compressing objects: 74% (92/123)[K
remote: Compressing objects: 75% (93/123)[K
remote: Compressing objects: 76% (94/123)[K
remote: Compressing objects: 77% (95/123)[K
remote: Compressing objects: 78% (96/123)[K
remote: Compressing objects: 79% (98/123)[K
remote: Compressing objects: 80% (99/123)[K
remote: Compressing objects: 81% (100/123)[K
remote: Compressing objects: 82% (101/123)[K
remote: Compressing objects: 83% (103/123)[K
remote: Compressing objects: 84% (104/123)[K
remote: Compressing objects: 85% (105/123)[K
remote: Compressing objects: 86% (106/123)[K
remote: Compressing objects: 87% (108/123)[K
remote: Compressing objects: 88% (109/123)[K
remote: Compressing objects: 89% (110/123)[K
remote: Compressing objects: 90% (111/123)[K
remote: Compressing objects: 91% (112/123)[K
remote: Compressing objects: 92% (114/123)[K
remote: Compressing objects: 93% (115/123)[K
remote: Compressing objects: 94% (116/123)[K
remote: Compressing objects: 95% (117/123)[K
remote: Compressing objects: 96% (119/123)[K
remote: Compressing objects: 97% (120/123)[K
remote: Compressing objects: 98% (121/123)[K
remote: Compressing objects: 99% (122/123)[K
remote: Compressing objects: 100% (123/123)[K
remote: Compressing objects: 100% (123/123), done.[K
Receiving objects: 0% (1/41053)
Receiving objects: 1% (411/41053)
Receiving objects: 2% (822/41053)
Receiving objects: 3% (1232/41053)
Receiving objects: 4% (1643/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 5% (2053/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 6% (2464/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 7% (2874/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 8% (3285/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 9% (3695/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 10% (4106/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 11% (4516/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 12% (4927/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 13% (5337/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 14% (5748/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 15% (6158/41053), 692.01 KiB | 1.26 MiB/s
Receiving objects: 15% (6236/41053), 1.64 MiB | 1.58 MiB/s
Receiving objects: 16% (6569/41053), 1.64 MiB | 1.58 MiB/s
Receiving objects: 16% (6781/41053), 4.05 MiB | 1.81 MiB/s
Receiving objects: 17% (6980/41053), 4.05 MiB | 1.81 MiB/s
Receiving objects: 18% (7390/41053), 4.05 MiB | 1.81 MiB/s
Receiving objects: 18% (7790/41053), 5.51 MiB | 2.01 MiB/s
Receiving objects: 19% (7801/41053), 5.51 MiB | 2.01 MiB/s
Receiving objects: 20% (8211/41053), 5.51 MiB | 2.01 MiB/s
Receiving objects: 21% (8622/41053), 7.00 MiB | 2.16 MiB/s
Receiving objects: 22% (9032/41053), 7.00 MiB | 2.16 MiB/s
Receiving objects: 22% (9223/41053), 7.53 MiB | 1.80 MiB/s
Receiving objects: 23% (9443/41053), 7.53 MiB | 1.80 MiB/s
Receiving objects: 24% (9853/41053), 7.53 MiB | 1.80 MiB/s
Receiving objects: 25% (10264/41053), 7.53 MiB | 1.80 MiB/s
Receiving objects: 26% (10674/41053), 7.53 MiB | 1.80 MiB/s
Receiving objects: 27% (11085/41053), 7.53 MiB | 1.80 MiB/s
Receiving objects: 28% (11495/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 29% (11906/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 30% (12316/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 31% (12727/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 32% (13137/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 33% (13548/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 33% (13875/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 34% (13959/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 35% (14369/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 36% (14780/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 37% (15190/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 38% (15601/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 39% (16011/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 40% (16422/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 41% (16832/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 42% (17243/41053), 8.72 MiB | 1.86 MiB/s
Receiving objects: 43% (17653/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 44% (18064/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 45% (18474/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 46% (18885/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 47% (19295/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 48% (19706/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 49% (20116/41053), 11.28 MiB | 2.17 MiB/s
Receiving objects: 50% (20527/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 51% (20938/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 52% (21348/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 53% (21759/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 54% (22169/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 55% (22580/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 56% (22990/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 57% (23401/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 58% (23811/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 59% (24222/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 60% (24632/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 61% (25043/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 62% (25453/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 63% (25864/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 64% (26274/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 64% (26663/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 65% (26685/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 66% (27095/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 67% (27506/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 68% (27917/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 69% (28327/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 70% (28738/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 71% (29148/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 72% (29559/41053), 11.76 MiB | 2.12 MiB/s
Receiving objects: 73% (29969/41053), 13.79 MiB | 2.33 MiB/s
Receiving objects: 74% (30380/41053), 13.79 MiB | 2.33 MiB/s
Receiving objects: 75% (30790/41053), 13.79 MiB | 2.33 MiB/s
Receiving objects: 75% (30975/41053), 17.16 MiB | 2.85 MiB/s
Receiving objects: 76% (31201/41053), 20.09 MiB | 3.12 MiB/s
Receiving objects: 76% (31336/41053), 23.74 MiB | 3.54 MiB/s
Receiving objects: 77% (31611/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 78% (32022/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 79% (32432/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 80% (32843/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 81% (33253/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 82% (33664/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 83% (34074/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 84% (34485/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 85% (34896/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 86% (35306/41053), 27.60 MiB | 4.00 MiB/s
Receiving objects: 87% (35717/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 88% (36127/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 89% (36538/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 90% (36948/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 91% (37359/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 92% (37769/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 93% (38180/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 94% (38590/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 95% (39001/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 96% (39411/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 97% (39822/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 98% (40232/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 99% (40643/41053), 31.73 MiB | 5.14 MiB/s
remote: Total 41053 (delta 91), reused 27 (delta 26), pack-reused 40889 (from 3)[K
Receiving objects: 100% (41053/41053), 31.73 MiB | 5.14 MiB/s
Receiving objects: 100% (41053/41053), 34.27 MiB | 3.73 MiB/s, done.
Resolving deltas: 0% (0/25511)
Resolving deltas: 1% (258/25511)
Resolving deltas: 2% (511/25511)
Resolving deltas: 3% (768/25511)
Resolving deltas: 4% (1023/25511)
Resolving deltas: 5% (1276/25511)
Resolving deltas: 6% (1531/25511)
Resolving deltas: 7% (1786/25511)
Resolving deltas: 8% (2041/25511)
Resolving deltas: 9% (2296/25511)
Resolving deltas: 10% (2553/25511)
Resolving deltas: 11% (2807/25511)
Resolving deltas: 12% (3062/25511)
Resolving deltas: 13% (3317/25511)
Resolving deltas: 14% (3572/25511)
Resolving deltas: 15% (3827/25511)
Resolving deltas: 16% (4082/25511)
Resolving deltas: 17% (4337/25511)
Resolving deltas: 18% (4592/25511)
Resolving deltas: 19% (4848/25511)
Resolving deltas: 20% (5103/25511)
Resolving deltas: 21% (5359/25511)
Resolving deltas: 22% (5617/25511)
Resolving deltas: 23% (5869/25511)
Resolving deltas: 24% (6124/25511)
Resolving deltas: 25% (6378/25511)
Resolving deltas: 26% (6633/25511)
Resolving deltas: 27% (6891/25511)
Resolving deltas: 28% (7144/25511)
Resolving deltas: 29% (7399/25511)
Resolving deltas: 30% (7654/25511)
Resolving deltas: 31% (7909/25511)
Resolving deltas: 32% (8165/25511)
Resolving deltas: 33% (8420/25511)
Resolving deltas: 34% (8674/25511)
Resolving deltas: 35% (8930/25511)
Resolving deltas: 36% (9185/25511)
Resolving deltas: 37% (9440/25511)
Resolving deltas: 38% (9695/25511)
Resolving deltas: 39% (9950/25511)
Resolving deltas: 40% (10209/25511)
Resolving deltas: 41% (10460/25511)
Resolving deltas: 42% (10721/25511)
Resolving deltas: 43% (10971/25511)
Resolving deltas: 44% (11225/25511)
Resolving deltas: 45% (11480/25511)
Resolving deltas: 46% (11736/25511)
Resolving deltas: 47% (11992/25511)
Resolving deltas: 48% (12246/25511)
Resolving deltas: 49% (12501/25511)
Resolving deltas: 50% (12758/25511)
Resolving deltas: 51% (13012/25511)
Resolving deltas: 52% (13266/25511)
Resolving deltas: 53% (13521/25511)
Resolving deltas: 54% (13776/25511)
Resolving deltas: 55% (14032/25511)
Resolving deltas: 56% (14288/25511)
Resolving deltas: 57% (14542/25511)
Resolving deltas: 58% (14798/25511)
Resolving deltas: 59% (15052/25511)
Resolving deltas: 60% (15307/25511)
Resolving deltas: 61% (15562/25511)
Resolving deltas: 62% (15817/25511)
Resolving deltas: 63% (16074/25511)
Resolving deltas: 64% (16328/25511)
Resolving deltas: 65% (16583/25511)
Resolving deltas: 66% (16838/25511)
Resolving deltas: 67% (17093/25511)
Resolving deltas: 68% (17348/25511)
Resolving deltas: 69% (17603/25511)
Resolving deltas: 70% (17858/25511)
Resolving deltas: 71% (18113/25511)
Resolving deltas: 72% (18368/25511)
Resolving deltas: 73% (18625/25511)
Resolving deltas: 74% (18879/25511)
Resolving deltas: 75% (19134/25511)
Resolving deltas: 76% (19389/25511)
Resolving deltas: 77% (19644/25511)
Resolving deltas: 78% (19899/25511)
Resolving deltas: 79% (20154/25511)
Resolving deltas: 80% (20409/25511)
Resolving deltas: 81% (20664/25511)
Resolving deltas: 82% (20920/25511)
Resolving deltas: 83% (21175/25511)
Resolving deltas: 84% (21430/25511)
Resolving deltas: 85% (21686/25511)
Resolving deltas: 86% (21940/25511)
Resolving deltas: 87% (22195/25511)
Resolving deltas: 88% (22450/25511)
Resolving deltas: 89% (22705/25511)
Resolving deltas: 90% (22960/25511)
Resolving deltas: 91% (23217/25511)
Resolving deltas: 92% (23471/25511)
Resolving deltas: 93% (23726/25511)
Resolving deltas: 94% (23982/25511)
Resolving deltas: 95% (24237/25511)
Resolving deltas: 96% (24492/25511)
Resolving deltas: 97% (24748/25511)
Resolving deltas: 98% (25001/25511)
Resolving deltas: 99% (25256/25511)
Resolving deltas: 100% (25511/25511)
Resolving deltas: 100% (25511/25511), done.
[1m[34m ->[m[1m Found certs.patch[m
[1m[32m==>[m[1m Validating source files with b2sums...[m
requests ... Passed
certs.patch ... Passed
[22;2t]2;🔵 Container arch-nspawn-2007029 on centiskorch.felixc.at\[1m[32m==>[m[1m Making package: python-requests 2.32.5-1 (Thu Aug 21 18:17:14 2025)[m
[1m[32m==>[m[1m Checking runtime dependencies...[m
[1m[32m==>[m[1m Installing missing dependencies...[m
[?25lresolving dependencies...
looking for conflicting packages...
Package (5) New Version Net Change
core/mpdecimal 4.0.1-1 0.31 MiB
core/python 3.13.5-1 123.83 MiB
extra/python-charset-normalizer 3.4.3-1 0.71 MiB
extra/python-idna 3.10-2 0.88 MiB
extra/python-urllib3 2.5.0-1 1.28 MiB
Total Installed Size: 127.00 MiB
:: Proceed with installation? [Y/n]
checking keyring...
checking package integrity...
loading package files...
checking for file conflicts...
:: Processing package changes...
installing mpdecimal...
installing python...
Optional dependencies for python
python-setuptools: for building Python packages using tooling that is usually bundled with Python
python-pip: for installing Python packages using tooling that is usually bundled with Python
python-pipx: for installing Python software not packaged on Arch Linux
sqlite: for a default database integration [installed]
xz: for lzma [installed]
tk: for tkinter
installing python-charset-normalizer...
installing python-idna...
installing python-urllib3...
Optional dependencies for python-urllib3
python-brotli: Brotli support
python-brotlicffi: Brotli support
python-h2: HTTP/2 support
python-pysocks: SOCKS support
python-zstandard: Zstandard support
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
[?25h[1m[32m==>[m[1m Checking buildtime dependencies...[m
[1m[32m==>[m[1m Installing missing dependencies...[m
[?25lresolving dependencies...
looking for conflicting packages...
Package (50) New Version Net Change Download Size
extra/httpbin 0.10.2-5 0.34 MiB
extra/libyaml 0.2.5-3 0.16 MiB
extra/perl-error 0.17030-2 0.04 MiB
extra/perl-mailtools 2.22-2 0.10 MiB
extra/perl-timedate 2.33-8 0.08 MiB
extra/python-attrs 25.3.0-1 0.58 MiB
extra/python-autocommand 2.2.2-7 0.08 MiB
extra/python-blinker 1.9.0-1 0.07 MiB
extra/python-brotlicffi 1.1.0.0-3 0.11 MiB
extra/python-cffi 1.17.1-2 1.35 MiB
extra/python-click 8.2.1-1 1.18 MiB
extra/python-cryptography 45.0.4-1 5.53 MiB
extra/python-decorator 5.2.1-1 0.06 MiB
extra/python-flasgger 0.9.7.1-5.1 13.35 MiB
extra/python-flask 3.1.1-1 1.03 MiB
extra/python-greenlet 3.2.4-1 0.44 MiB 0.12 MiB
extra/python-iniconfig 2.1.0-1 0.04 MiB
extra/python-itsdangerous 2.2.0-1 0.14 MiB
extra/python-jaraco.collections 5.1.0-1 0.10 MiB
extra/python-jaraco.context 6.0.1-1 0.04 MiB
extra/python-jaraco.functools 4.1.0-1 0.07 MiB
extra/python-jaraco.text 4.0.0-2 0.08 MiB
extra/python-jinja 1:3.1.6-1 1.77 MiB
extra/python-jsonschema 4.25.1-1 1.35 MiB 0.19 MiB
extra/python-jsonschema-specifications 2025.4.1-1 0.05 MiB
extra/python-markupsafe 3.0.2-1 0.08 MiB
extra/python-mistune 1:3.1.3-1 0.56 MiB
extra/python-more-itertools 10.7.0-1 0.67 MiB
extra/python-packaging 25.0-1 0.67 MiB
extra/python-platformdirs 4.3.8-1 0.24 MiB
extra/python-pluggy 1.6.0-1 0.20 MiB
extra/python-pycparser 2.22-3 1.69 MiB
extra/python-pygments 2.19.2-1 14.38 MiB
extra/python-pyopenssl 25.1.0-1 0.68 MiB
extra/python-pyproject-hooks 1.2.0-3 0.10 MiB
extra/python-pytest 1:8.4.1-1 4.17 MiB
extra/python-referencing 0.36.2-1 0.38 MiB
extra/python-rpds-py 0.22.3-1 0.65 MiB
extra/python-six 1.17.0-1 0.12 MiB
extra/python-werkzeug 3.1.3-1 2.43 MiB
extra/python-yaml 6.0.2-2 0.91 MiB
extra/zlib-ng 2.2.5-1 0.21 MiB
extra/git 2.50.1-3 28.58 MiB
extra/python-build 1.3.0-1 0.20 MiB
extra/python-installer 0.7.0-10 0.17 MiB
extra/python-pysocks 1.7.1-10 0.13 MiB 0.03 MiB
extra/python-pytest-httpbin 2.1.0-1 0.04 MiB
extra/python-setuptools 1:80.9.0-1 7.65 MiB
extra/python-trustme 1.2.0-2 0.10 MiB
extra/python-wheel 0.45.1-1 0.28 MiB
Total Download Size: 0.33 MiB
Total Installed Size: 93.44 MiB
:: Proceed with installation? [Y/n]
:: Retrieving packages...
python-jsonschema-4.25.1-1-any downloading...
python-greenlet-3.2.4-1-riscv64 downloading...
python-pysocks-1.7.1-10-any downloading...
checking keyring...
checking package integrity...
loading package files...
checking for file conflicts...
:: Processing package changes...
installing perl-error...
installing perl-timedate...
installing perl-mailtools...
installing zlib-ng...
installing git...
Optional dependencies for git
git-zsh-completion: upstream zsh completion
tk: gitk and git gui
openssh: ssh transport and crypto
man: show help with `git command --help`
perl-libwww: git svn
perl-term-readkey: git svn and interactive.singlekey setting
perl-io-socket-ssl: git send-email TLS support
perl-authen-sasl: git send-email TLS support
perl-mediawiki-api: git mediawiki support
perl-datetime-format-iso8601: git mediawiki support
perl-lwp-protocol-https: git mediawiki https support
perl-cgi: gitweb (web interface) support
python: git svn & git p4 [installed]
subversion: git svn
org.freedesktop.secrets: keyring credential helper
libsecret: libsecret credential helper [installed]
less: the default pager for git
installing python-packaging...
installing python-pyproject-hooks...
installing python-build...
Optional dependencies for python-build
python-pip: to use as the Python package installer (default)
python-uv: to use as the Python package installer
python-virtualenv: to use virtualenv for build isolation
installing python-installer...
installing python-more-itertools...
installing python-jaraco.functools...
installing python-jaraco.context...
installing python-autocommand...
installing python-jaraco.text...
Optional dependencies for python-jaraco.text
python-inflect: for show-newlines script
installing python-jaraco.collections...
installing python-platformdirs...
installing python-wheel...
Optional dependencies for python-wheel
python-keyring: for wheel.signatures
python-xdg: for wheel.signatures
python-setuptools: for legacy bdist_wheel subcommand [pending]
installing python-setuptools...
installing python-pysocks...
installing python-iniconfig...
installing python-pluggy...
installing python-pygments...
installing python-pytest...
installing python-blinker...
installing python-click...
installing python-itsdangerous...
installing python-markupsafe...
installing python-jinja...
Optional dependencies for python-jinja
python-babel: for i18n support
installing python-werkzeug...
Optional dependencies for python-werkzeug
python-watchdog: faster and more advanced reloader
installing python-flask...
Optional dependencies for python-flask
python-asgiref: async functions and views
python-cryptography: using ad-hoc certificates [pending]
python-dotenv: loading env vars from files
installing python-decorator...
installing python-pycparser...
installing python-cffi...
Optional dependencies for python-cffi
python-setuptools: "limited api" version checking in cffi.setuptools_ext [installed]
installing python-brotlicffi...
installing libyaml...
installing python-yaml...
installing python-attrs...
installing python-rpds-py...
installing python-referencing...
installing python-jsonschema-specifications...
installing python-jsonschema...
Optional dependencies for python-jsonschema
python-isoduration: for duration format
python-fqdn: for hostname format
python-idna: for idn-hostname format [installed]
python-jsonpointer: for json-pointer & relative-json-pointer format
python-rfc3339-validator: for date-time format
python-rfc3987: for iri, iri-reference, uri & uri-reference format
python-uri-template: for uri-template format
python-webcolors: for color format
installing python-mistune...
installing python-six...
installing python-flasgger...
installing python-greenlet...
installing httpbin...
installing python-pytest-httpbin...
installing python-cryptography...
installing python-pyopenssl...
installing python-trustme...
:: Running post-transaction hooks...
(1/4) Creating system user accounts...
Creating group 'git' with GID 971.
Creating user 'git' (git daemon user) with UID 971 and GID 971.
(2/4) Reloading system manager configuration...
Skipped: Current root is not booted.
(3/4) Arming ConditionNeedsUpdate...
(4/4) Checking for old perl modules...
[?25h[1m[32m==>[m[1m Retrieving sources...[m
[1m[34m ->[m[1m Found certs.patch[m
[1m[33m==> WARNING:[m[1m Skipping all source file integrity checks.[m
[1m[32m==>[m[1m Extracting sources...[m
[1m[34m ->[m[1m Creating working copy of requests git repo...[m
Cloning into 'requests'...
done.
Switched to a new branch 'makepkg'
[1m[32m==>[m[1m Starting prepare()...[m
patching file src/requests/certs.py
[1m[32m==>[m[1m Starting build()...[m
* Getting build dependencies for wheel...
/usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'provides-extra' in 'metadata' (setup.cfg), please use the underscore name 'provides_extra' instead.
!!
********************************************************************************
Usage of dash-separated 'provides-extra' will not be supported in future
versions. Please use the underscore name 'provides_extra' instead.
By 2026-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self._enforce_underscore(opt, section)
/usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'requires-dist' in 'metadata' (setup.cfg), please use the underscore name 'requires_dist' instead.
!!
********************************************************************************
Usage of dash-separated 'requires-dist' will not be supported in future
versions. Please use the underscore name 'requires_dist' instead.
By 2026-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self._enforce_underscore(opt, section)
/usr/lib/python3.13/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
warnings.warn(msg)
/usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'provides-extra' in 'metadata' (setup.cfg), please use the underscore name 'provides_extra' instead.
!!
********************************************************************************
Usage of dash-separated 'provides-extra' will not be supported in future
versions. Please use the underscore name 'provides_extra' instead.
(Affected: requests).
By 2026-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self._enforce_underscore(opt, section)
/usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'requires-dist' in 'metadata' (setup.cfg), please use the underscore name 'requires_dist' instead.
!!
********************************************************************************
Usage of dash-separated 'requires-dist' will not be supported in future
versions. Please use the underscore name 'requires_dist' instead.
(Affected: requests).
By 2026-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self._enforce_underscore(opt, section)
/usr/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX license expression:
License :: OSI Approved :: Apache Software License
See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************
!!
self._finalize_license_expression()
running egg_info
creating src/requests.egg-info
writing src/requests.egg-info/PKG-INFO
writing dependency_links to src/requests.egg-info/dependency_links.txt
writing requirements to src/requests.egg-info/requires.txt
writing top-level names to src/requests.egg-info/top_level.txt
writing manifest file 'src/requests.egg-info/SOURCES.txt'
reading manifest file 'src/requests.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE'
writing manifest file 'src/requests.egg-info/SOURCES.txt'
* Building wheel...
/usr/lib/python3.13/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'tests_require'
warnings.warn(msg)
/usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'provides-extra' in 'metadata' (setup.cfg), please use the underscore name 'provides_extra' instead.
!!
********************************************************************************
Usage of dash-separated 'provides-extra' will not be supported in future
versions. Please use the underscore name 'provides_extra' instead.
(Affected: requests).
By 2026-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self._enforce_underscore(opt, section)
/usr/lib/python3.13/site-packages/setuptools/dist.py:599: SetuptoolsDeprecationWarning: Invalid dash-separated key 'requires-dist' in 'metadata' (setup.cfg), please use the underscore name 'requires_dist' instead.
!!
********************************************************************************
Usage of dash-separated 'requires-dist' will not be supported in future
versions. Please use the underscore name 'requires_dist' instead.
(Affected: requests).
By 2026-Mar-03, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
********************************************************************************
!!
opt = self._enforce_underscore(opt, section)
/usr/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX license expression:
License :: OSI Approved :: Apache Software License
See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************
!!
self._finalize_license_expression()
running bdist_wheel
running build
running build_py
creating build/lib/requests
copying src/requests/sessions.py -> build/lib/requests
copying src/requests/hooks.py -> build/lib/requests
copying src/requests/adapters.py -> build/lib/requests
copying src/requests/structures.py -> build/lib/requests
copying src/requests/status_codes.py -> build/lib/requests
copying src/requests/certs.py -> build/lib/requests
copying src/requests/auth.py -> build/lib/requests
copying src/requests/packages.py -> build/lib/requests
copying src/requests/utils.py -> build/lib/requests
copying src/requests/cookies.py -> build/lib/requests
copying src/requests/help.py -> build/lib/requests
copying src/requests/compat.py -> build/lib/requests
copying src/requests/__version__.py -> build/lib/requests
copying src/requests/__init__.py -> build/lib/requests
copying src/requests/_internal_utils.py -> build/lib/requests
copying src/requests/api.py -> build/lib/requests
copying src/requests/models.py -> build/lib/requests
copying src/requests/exceptions.py -> build/lib/requests
running egg_info
writing src/requests.egg-info/PKG-INFO
writing dependency_links to src/requests.egg-info/dependency_links.txt
writing requirements to src/requests.egg-info/requires.txt
writing top-level names to src/requests.egg-info/top_level.txt
reading manifest file 'src/requests.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE'
writing manifest file 'src/requests.egg-info/SOURCES.txt'
installing to build/bdist.linux-riscv64/wheel
running install
running install_lib
creating build/bdist.linux-riscv64/wheel
creating build/bdist.linux-riscv64/wheel/requests
copying build/lib/requests/sessions.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/hooks.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/adapters.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/structures.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/status_codes.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/certs.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/auth.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/packages.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/utils.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/cookies.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/help.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/compat.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/__version__.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/__init__.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/_internal_utils.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/api.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/models.py -> build/bdist.linux-riscv64/wheel/./requests
copying build/lib/requests/exceptions.py -> build/bdist.linux-riscv64/wheel/./requests
running install_egg_info
Copying src/requests.egg-info to build/bdist.linux-riscv64/wheel/./requests-2.32.5-py3.13.egg-info
running install_scripts
creating build/bdist.linux-riscv64/wheel/requests-2.32.5.dist-info/WHEEL
creating '/build/python-requests/src/requests/dist/.tmp-03pmw0zk/requests-2.32.5-py3-none-any.whl' and adding 'build/bdist.linux-riscv64/wheel' to it
adding 'requests/__init__.py'
adding 'requests/__version__.py'
adding 'requests/_internal_utils.py'
adding 'requests/adapters.py'
adding 'requests/api.py'
adding 'requests/auth.py'
adding 'requests/certs.py'
adding 'requests/compat.py'
adding 'requests/cookies.py'
adding 'requests/exceptions.py'
adding 'requests/help.py'
adding 'requests/hooks.py'
adding 'requests/models.py'
adding 'requests/packages.py'
adding 'requests/sessions.py'
adding 'requests/status_codes.py'
adding 'requests/structures.py'
adding 'requests/utils.py'
adding 'requests-2.32.5.dist-info/licenses/LICENSE'
adding 'requests-2.32.5.dist-info/METADATA'
adding 'requests-2.32.5.dist-info/WHEEL'
adding 'requests-2.32.5.dist-info/top_level.txt'
adding 'requests-2.32.5.dist-info/RECORD'
removing build/bdist.linux-riscv64/wheel
Successfully built requests-2.32.5-py3-none-any.whl
[1m[32m==>[m[1m Starting check()...[m
============================= test session starts ==============================
platform linux -- Python 3.13.5, pytest-8.4.1, pluggy-1.6.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /build/python-requests/src/requests
configfile: pyproject.toml
plugins: httpbin-2.1.0
collecting ... collected 611 items / 1 deselected / 610 selected
tests/test_adapters.py::test_request_url_trims_leading_path_separators PASSED [ 0%]
tests/test_help.py::test_system_ssl PASSED [ 0%]
tests/test_help.py::test_idna_without_version_attribute PASSED [ 0%]
tests/test_help.py::test_idna_with_version_attribute PASSED [ 0%]
tests/test_hooks.py::test_hooks[hook-ata] PASSED [ 0%]
tests/test_hooks.py::test_hooks[hooks_list1-ta] PASSED [ 0%]
tests/test_hooks.py::test_default_hooks PASSED [ 1%]
tests/test_lowlevel.py::test_chunked_upload PASSED [ 1%]
tests/test_lowlevel.py::test_chunked_encoding_error PASSED [ 1%]
tests/test_lowlevel.py::test_chunked_upload_uses_only_specified_host_header PASSED [ 1%]
tests/test_lowlevel.py::test_chunked_upload_doesnt_skip_host_header PASSED [ 1%]
tests/test_lowlevel.py::test_conflicting_content_lengths PASSED [ 1%]
tests/test_lowlevel.py::test_digestauth_401_count_reset_on_redirect PASSED [ 2%]
tests/test_lowlevel.py::test_digestauth_401_only_sent_once PASSED [ 2%]
tests/test_lowlevel.py::test_digestauth_only_on_4xx PASSED [ 2%]
tests/test_lowlevel.py::test_use_proxy_from_environment[http_proxy-http] PASSED [ 2%]
tests/test_lowlevel.py::test_use_proxy_from_environment[https_proxy-https] PASSED [ 2%]
tests/test_lowlevel.py::test_use_proxy_from_environment[all_proxy-http] PASSED [ 2%]
tests/test_lowlevel.py::test_use_proxy_from_environment[all_proxy-https] PASSED [ 3%]
tests/test_lowlevel.py::test_use_proxy_from_environment[HTTP_PROXY-http] PASSED [ 3%]
tests/test_lowlevel.py::test_use_proxy_from_environment[HTTPS_PROXY-https] PASSED [ 3%]
tests/test_lowlevel.py::test_use_proxy_from_environment[ALL_PROXY-http] PASSED [ 3%]
tests/test_lowlevel.py::test_use_proxy_from_environment[ALL_PROXY-https] PASSED [ 3%]
tests/test_lowlevel.py::test_redirect_rfc1808_to_non_ascii_location PASSED [ 3%]
tests/test_lowlevel.py::test_fragment_not_sent_with_request PASSED [ 4%]
tests/test_lowlevel.py::test_fragment_update_on_redirect PASSED [ 4%]
tests/test_lowlevel.py::test_json_decode_compatibility_for_alt_utf_encodings PASSED [ 4%]
tests/test_packages.py::test_can_access_urllib3_attribute PASSED [ 4%]
tests/test_packages.py::test_can_access_idna_attribute PASSED [ 4%]
tests/test_packages.py::test_can_access_chardet_attribute PASSED [ 4%]
tests/test_requests.py::TestRequests::test_entry_points PASSED [ 5%]
tests/test_requests.py::TestRequests::test_invalid_url[MissingSchema-hiwpefhipowhefopw] PASSED [ 5%]
tests/test_requests.py::TestRequests::test_invalid_url[InvalidSchema-localhost:3128] PASSED [ 5%]
tests/test_requests.py::TestRequests::test_invalid_url[InvalidSchema-localhost.localdomain:3128/] PASSED [ 5%]
tests/test_requests.py::TestRequests::test_invalid_url[InvalidSchema-10.122.1.1:3128/] PASSED [ 5%]
tests/test_requests.py::TestRequests::test_invalid_url[InvalidURL-http://] PASSED [ 5%]
tests/test_requests.py::TestRequests::test_invalid_url[InvalidURL-http://*example.com] PASSED [ 6%]
tests/test_requests.py::TestRequests::test_invalid_url[InvalidURL-http://.example.com] PASSED [ 6%]
tests/test_requests.py::TestRequests::test_basic_building PASSED [ 6%]
tests/test_requests.py::TestRequests::test_no_content_length[GET] PASSED [ 6%]
tests/test_requests.py::TestRequests::test_no_content_length[HEAD] PASSED [ 6%]
tests/test_requests.py::TestRequests::test_no_body_content_length[POST] PASSED [ 6%]
tests/test_requests.py::TestRequests::test_no_body_content_length[PUT] PASSED [ 7%]
tests/test_requests.py::TestRequests::test_no_body_content_length[PATCH] PASSED [ 7%]
tests/test_requests.py::TestRequests::test_no_body_content_length[OPTIONS] PASSED [ 7%]
tests/test_requests.py::TestRequests::test_empty_content_length[POST] PASSED [ 7%]
tests/test_requests.py::TestRequests::test_empty_content_length[PUT] PASSED [ 7%]
tests/test_requests.py::TestRequests::test_empty_content_length[PATCH] PASSED [ 7%]
tests/test_requests.py::TestRequests::test_empty_content_length[OPTIONS] PASSED [ 8%]
tests/test_requests.py::TestRequests::test_override_content_length PASSED [ 8%]
tests/test_requests.py::TestRequests::test_path_is_not_double_encoded PASSED [ 8%]
tests/test_requests.py::TestRequests::test_params_are_added_before_fragment[http://example.com/path#fragment-http://example.com/path?a=b#fragment] PASSED [ 8%]
tests/test_requests.py::TestRequests::test_params_are_added_before_fragment[http://example.com/path?key=value#fragment-http://example.com/path?key=value&a=b#fragment] PASSED [ 8%]
tests/test_requests.py::TestRequests::test_params_original_order_is_preserved_by_default PASSED [ 8%]
tests/test_requests.py::TestRequests::test_params_bytes_are_encoded PASSED [ 9%]
tests/test_requests.py::TestRequests::test_binary_put PASSED [ 9%]
tests/test_requests.py::TestRequests::test_whitespaces_are_removed_from_url PASSED [ 9%]
tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[http://] PASSED [ 9%]
tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[HTTP://] PASSED [ 9%]
tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[hTTp://] PASSED [ 9%]
tests/test_requests.py::TestRequests::test_mixed_case_scheme_acceptable[HttP://] PASSED [ 10%]
tests/test_requests.py::TestRequests::test_HTTP_200_OK_GET_ALTERNATIVE PASSED [ 10%]
tests/test_requests.py::TestRequests::test_HTTP_302_ALLOW_REDIRECT_GET PASSED [ 10%]
tests/test_requests.py::TestRequests::test_HTTP_307_ALLOW_REDIRECT_POST PASSED [ 10%]
tests/test_requests.py::TestRequests::test_HTTP_307_ALLOW_REDIRECT_POST_WITH_SEEKABLE PASSED [ 10%]
tests/test_requests.py::TestRequests::test_HTTP_302_TOO_MANY_REDIRECTS PASSED [ 10%]
tests/test_requests.py::TestRequests::test_HTTP_302_TOO_MANY_REDIRECTS_WITH_PARAMS PASSED [ 10%]
tests/test_requests.py::TestRequests::test_http_301_changes_post_to_get PASSED [ 11%]
tests/test_requests.py::TestRequests::test_http_301_doesnt_change_head_to_get PASSED [ 11%]
tests/test_requests.py::TestRequests::test_http_302_changes_post_to_get PASSED [ 11%]
tests/test_requests.py::TestRequests::test_http_302_doesnt_change_head_to_get PASSED [ 11%]
tests/test_requests.py::TestRequests::test_http_303_changes_post_to_get PASSED [ 11%]
tests/test_requests.py::TestRequests::test_http_303_doesnt_change_head_to_get PASSED [ 11%]
tests/test_requests.py::TestRequests::test_header_and_body_removal_on_redirect PASSED [ 12%]
tests/test_requests.py::TestRequests::test_transfer_enc_removal_on_redirect PASSED [ 12%]
tests/test_requests.py::TestRequests::test_fragment_maintained_on_redirect PASSED [ 12%]
tests/test_requests.py::TestRequests::test_HTTP_200_OK_GET_WITH_PARAMS PASSED [ 12%]
tests/test_requests.py::TestRequests::test_HTTP_200_OK_GET_WITH_MIXED_PARAMS PASSED [ 12%]
tests/test_requests.py::TestRequests::test_set_cookie_on_301 PASSED [ 12%]
tests/test_requests.py::TestRequests::test_cookie_sent_on_redirect PASSED [ 13%]
tests/test_requests.py::TestRequests::test_cookie_removed_on_expire PASSED [ 13%]
tests/test_requests.py::TestRequests::test_cookie_quote_wrapped PASSED [ 13%]
tests/test_requests.py::TestRequests::test_cookie_persists_via_api PASSED [ 13%]
tests/test_requests.py::TestRequests::test_request_cookie_overrides_session_cookie PASSED [ 13%]
tests/test_requests.py::TestRequests::test_request_cookies_not_persisted PASSED [ 13%]
tests/test_requests.py::TestRequests::test_generic_cookiejar_works PASSED [ 14%]
tests/test_requests.py::TestRequests::test_param_cookiejar_works PASSED [ 14%]
tests/test_requests.py::TestRequests::test_cookielib_cookiejar_on_redirect PASSED [ 14%]
tests/test_requests.py::TestRequests::test_requests_in_history_are_not_overridden PASSED [ 14%]
tests/test_requests.py::TestRequests::test_history_is_always_a_list PASSED [ 14%]
tests/test_requests.py::TestRequests::test_headers_on_session_with_None_are_not_sent PASSED [ 14%]
tests/test_requests.py::TestRequests::test_headers_preserve_order PASSED [ 15%]
tests/test_requests.py::TestRequests::test_user_agent_transfers[User-agent] PASSED [ 15%]
tests/test_requests.py::TestRequests::test_user_agent_transfers[user-agent] PASSED [ 15%]
tests/test_requests.py::TestRequests::test_HTTP_200_OK_HEAD PASSED [ 15%]
tests/test_requests.py::TestRequests::test_HTTP_200_OK_PUT PASSED [ 15%]
tests/test_requests.py::TestRequests::test_BASICAUTH_TUPLE_HTTP_200_OK_GET PASSED [ 15%]
tests/test_requests.py::TestRequests::test_set_basicauth[user-pass] PASSED [ 16%]
tests/test_requests.py::TestRequests::test_set_basicauth[\xd0\xb8\xd0\xbc\xd1\x8f-\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c] PASSED [ 16%]
tests/test_requests.py::TestRequests::test_set_basicauth[42-42] PASSED [ 16%]
tests/test_requests.py::TestRequests::test_set_basicauth[None-None] PASSED [ 16%]
tests/test_requests.py::TestRequests::test_basicauth_encodes_byte_strings PASSED [ 16%]
tests/test_requests.py::TestRequests::test_errors[http://doesnotexist.google.com-ConnectionError] PASSED [ 16%]
tests/test_requests.py::TestRequests::test_errors[http://localhost:1-ConnectionError] PASSED [ 17%]
tests/test_requests.py::TestRequests::test_errors[http://fe80::5054:ff:fe5a:fc0-InvalidURL] PASSED [ 17%]
tests/test_requests.py::TestRequests::test_proxy_error PASSED [ 17%]
tests/test_requests.py::TestRequests::test_proxy_error_on_bad_url PASSED [ 17%]
tests/test_requests.py::TestRequests::test_respect_proxy_env_on_send_self_prepared_request PASSED [ 17%]
tests/test_requests.py::TestRequests::test_respect_proxy_env_on_send_session_prepared_request PASSED [ 17%]
tests/test_requests.py::TestRequests::test_respect_proxy_env_on_send_with_redirects PASSED [ 18%]
tests/test_requests.py::TestRequests::test_respect_proxy_env_on_get PASSED [ 18%]
tests/test_requests.py::TestRequests::test_respect_proxy_env_on_request PASSED [ 18%]
tests/test_requests.py::TestRequests::test_proxy_authorization_preserved_on_request PASSED [ 18%]
tests/test_requests.py::TestRequests::test_proxy_authorization_not_appended_to_https_request[http://example.com-True] PASSED [ 18%]
tests/test_requests.py::TestRequests::test_proxy_authorization_not_appended_to_https_request[https://example.com-False] PASSED [ 18%]
tests/test_requests.py::TestRequests::test_basicauth_with_netrc PASSED [ 19%]
tests/test_requests.py::TestRequests::test_basicauth_with_netrc_leak PASSED [ 19%]
tests/test_requests.py::TestRequests::test_DIGEST_HTTP_200_OK_GET PASSED [ 19%]
tests/test_requests.py::TestRequests::test_DIGEST_AUTH_RETURNS_COOKIE PASSED [ 19%]
tests/test_requests.py::TestRequests::test_DIGEST_AUTH_SETS_SESSION_COOKIES PASSED [ 19%]
tests/test_requests.py::TestRequests::test_DIGEST_STREAM PASSED [ 19%]
tests/test_requests.py::TestRequests::test_DIGESTAUTH_WRONG_HTTP_401_GET PASSED [ 20%]
tests/test_requests.py::TestRequests::test_DIGESTAUTH_QUOTES_QOP_VALUE PASSED [ 20%]
tests/test_requests.py::TestRequests::test_POSTBIN_GET_POST_FILES PASSED [ 20%]
tests/test_requests.py::TestRequests::test_invalid_files_input PASSED [ 20%]
tests/test_requests.py::TestRequests::test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER PASSED [ 20%]
tests/test_requests.py::TestRequests::test_POSTBIN_GET_POST_FILES_WITH_DATA PASSED [ 20%]
tests/test_requests.py::TestRequests::test_post_with_custom_mapping PASSED [ 20%]
tests/test_requests.py::TestRequests::test_conflicting_post_params PASSED [ 21%]
tests/test_requests.py::TestRequests::test_request_ok_set PASSED [ 21%]
tests/test_requests.py::TestRequests::test_status_raising PASSED [ 21%]
tests/test_requests.py::TestRequests::test_decompress_gzip PASSED [ 21%]
tests/test_requests.py::TestRequests::test_unicode_get[/get-params0] PASSED [ 21%]
tests/test_requests.py::TestRequests::test_unicode_get[/get-params1] PASSED [ 21%]
tests/test_requests.py::TestRequests::test_unicode_get[/get-params2] PASSED [ 22%]
tests/test_requests.py::TestRequests::test_unicode_get[/get-params3] PASSED [ 22%]
tests/test_requests.py::TestRequests::test_unicode_get[\xf8-params4] PASSED [ 22%]
tests/test_requests.py::TestRequests::test_pyopenssl_redirect PASSED [ 22%]
tests/test_requests.py::TestRequests::test_invalid_ca_certificate_path PASSED [ 22%]
tests/test_requests.py::TestRequests::test_invalid_ssl_certificate_files PASSED [ 22%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env0-True] PASSED [ 23%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env1-/some/path] PASSED [ 23%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env2-True] PASSED [ 23%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env3-/some/path] PASSED [ 23%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env4-True] PASSED [ 23%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env5-True] PASSED [ 23%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env6-/some/path] PASSED [ 24%]
tests/test_requests.py::TestRequests::test_env_cert_bundles[env7-/curl/path] PASSED [ 24%]
tests/test_requests.py::TestRequests::test_http_with_certificate PASSED [ 24%]
tests/test_requests.py::TestRequests::test_https_warnings SKIPPED (u...) [ 24%]
tests/test_requests.py::TestRequests::test_certificate_failure pytest-httpbin server hit an exception serving request: [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:1028)
attempting to ignore so the rest of the tests can run
PASSED [ 24%]
tests/test_requests.py::TestRequests::test_urlencoded_get_query_multivalued_param PASSED [ 24%]
tests/test_requests.py::TestRequests::test_form_encoded_post_query_multivalued_element PASSED [ 25%]
tests/test_requests.py::TestRequests::test_different_encodings_dont_break_post PASSED [ 25%]
tests/test_requests.py::TestRequests::test_unicode_multipart_post[data0] PASSED [ 25%]
tests/test_requests.py::TestRequests::test_unicode_multipart_post[data1] PASSED [ 25%]
tests/test_requests.py::TestRequests::test_unicode_multipart_post[data2] PASSED [ 25%]
tests/test_requests.py::TestRequests::test_unicode_multipart_post[data3] PASSED [ 25%]
tests/test_requests.py::TestRequests::test_unicode_multipart_post_fieldnames PASSED [ 26%]
tests/test_requests.py::TestRequests::test_unicode_method_name PASSED [ 26%]
tests/test_requests.py::TestRequests::test_unicode_method_name_with_request_object PASSED [ 26%]
tests/test_requests.py::TestRequests::test_non_prepared_request_error PASSED [ 26%]
tests/test_requests.py::TestRequests::test_custom_content_type PASSED [ 26%]
tests/test_requests.py::TestRequests::test_hook_receives_request_arguments PASSED [ 26%]
tests/test_requests.py::TestRequests::test_session_hooks_are_used_with_no_request_hooks PASSED [ 27%]
tests/test_requests.py::TestRequests::test_session_hooks_are_overridden_by_request_hooks PASSED [ 27%]
tests/test_requests.py::TestRequests::test_prepared_request_hook PASSED [ 27%]
tests/test_requests.py::TestRequests::test_prepared_from_session PASSED [ 27%]
tests/test_requests.py::TestRequests::test_prepare_request_with_bytestring_url PASSED [ 27%]
tests/test_requests.py::TestRequests::test_request_with_bytestring_host PASSED [ 27%]
tests/test_requests.py::TestRequests::test_links PASSED [ 28%]
tests/test_requests.py::TestRequests::test_cookie_parameters PASSED [ 28%]
tests/test_requests.py::TestRequests::test_cookie_as_dict_keeps_len PASSED [ 28%]
tests/test_requests.py::TestRequests::test_cookie_as_dict_keeps_items PASSED [ 28%]
tests/test_requests.py::TestRequests::test_cookie_as_dict_keys PASSED [ 28%]
tests/test_requests.py::TestRequests::test_cookie_as_dict_values PASSED [ 28%]
tests/test_requests.py::TestRequests::test_cookie_as_dict_items PASSED [ 29%]
tests/test_requests.py::TestRequests::test_cookie_duplicate_names_different_domains PASSED [ 29%]
tests/test_requests.py::TestRequests::test_cookie_duplicate_names_raises_cookie_conflict_error PASSED [ 29%]
tests/test_requests.py::TestRequests::test_cookie_policy_copy PASSED [ 29%]
tests/test_requests.py::TestRequests::test_time_elapsed_blank PASSED [ 29%]
tests/test_requests.py::TestRequests::test_empty_response_has_content_none PASSED [ 29%]
tests/test_requests.py::TestRequests::test_response_is_iterable PASSED [ 30%]
tests/test_requests.py::TestRequests::test_response_decode_unicode PASSED [ 30%]
tests/test_requests.py::TestRequests::test_response_reason_unicode PASSED [ 30%]
tests/test_requests.py::TestRequests::test_response_reason_unicode_fallback PASSED [ 30%]
tests/test_requests.py::TestRequests::test_response_chunk_size_type PASSED [ 30%]
tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[ProtocolError-args0-ChunkedEncodingError] PASSED [ 30%]
tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[DecodeError-args1-ContentDecodingError] PASSED [ 30%]
tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[ReadTimeoutError-args2-ConnectionError] PASSED [ 31%]
tests/test_requests.py::TestRequests::test_iter_content_wraps_exceptions[SSLError-args3-SSLError] PASSED [ 31%]
tests/test_requests.py::TestRequests::test_request_and_response_are_pickleable PASSED [ 31%]
tests/test_requests.py::TestRequests::test_prepared_request_is_pickleable PASSED [ 31%]
tests/test_requests.py::TestRequests::test_prepared_request_with_file_is_pickleable PASSED [ 31%]
tests/test_requests.py::TestRequests::test_prepared_request_with_hook_is_pickleable PASSED [ 31%]
tests/test_requests.py::TestRequests::test_cannot_send_unprepared_requests PASSED [ 32%]
tests/test_requests.py::TestRequests::test_http_error PASSED [ 32%]
tests/test_requests.py::TestRequests::test_session_pickling PASSED [ 32%]
tests/test_requests.py::TestRequests::test_fixes_1329 PASSED [ 32%]
tests/test_requests.py::TestRequests::test_uppercase_scheme_redirect PASSED [ 32%]
tests/test_requests.py::TestRequests::test_transport_adapter_ordering PASSED [ 32%]
tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_matching PASSED [ 33%]
tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_matching_mixed_case PASSED [ 33%]
tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_matching_is_case_insensitive PASSED [ 33%]
tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_with_trailing_slash PASSED [ 33%]
tests/test_requests.py::TestRequests::test_session_get_adapter_prefix_without_trailing_slash PASSED [ 33%]
tests/test_requests.py::TestRequests::test_header_remove_is_case_insensitive PASSED [ 33%]
tests/test_requests.py::TestRequests::test_params_are_merged_case_sensitive PASSED [ 34%]
tests/test_requests.py::TestRequests::test_long_authinfo_in_url PASSED [ 34%]
tests/test_requests.py::TestRequests::test_header_keys_are_native PASSED [ 34%]
tests/test_requests.py::TestRequests::test_header_validation PASSED [ 34%]
tests/test_requests.py::TestRequests::test_header_value_not_str[invalid_header0-foo] PASSED [ 34%]
tests/test_requests.py::TestRequests::test_header_value_not_str[invalid_header1-bar] PASSED [ 34%]
tests/test_requests.py::TestRequests::test_header_value_not_str[invalid_header2-baz] PASSED [ 35%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header0] PASSED [ 35%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header1] PASSED [ 35%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header2] PASSED [ 35%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header3] PASSED [ 35%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header4] PASSED [ 35%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header5] PASSED [ 36%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header6] PASSED [ 36%]
tests/test_requests.py::TestRequests::test_header_no_return_chars[invalid_header7] PASSED [ 36%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header0] PASSED [ 36%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header1] PASSED [ 36%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header2] PASSED [ 36%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header3] PASSED [ 37%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header4] PASSED [ 37%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header5] PASSED [ 37%]
tests/test_requests.py::TestRequests::test_header_no_leading_space[invalid_header6] PASSED [ 37%]
tests/test_requests.py::TestRequests::test_header_with_subclass_types PASSED [ 37%]
tests/test_requests.py::TestRequests::test_can_send_objects_with_files[foo0] PASSED [ 37%]
tests/test_requests.py::TestRequests::test_can_send_objects_with_files[foo1] PASSED [ 38%]
tests/test_requests.py::TestRequests::test_can_send_objects_with_files[files2] PASSED [ 38%]
tests/test_requests.py::TestRequests::test_can_send_file_object_with_non_string_filename PASSED [ 38%]
tests/test_requests.py::TestRequests::test_autoset_header_values_are_native PASSED [ 38%]
tests/test_requests.py::TestRequests::test_nonhttp_schemes_dont_check_URLs PASSED [ 38%]
tests/test_requests.py::TestRequests::test_auth_is_stripped_on_http_downgrade PASSED [ 38%]
tests/test_requests.py::TestRequests::test_auth_is_retained_for_redirect_on_host PASSED [ 39%]
tests/test_requests.py::TestRequests::test_should_strip_auth_host_change PASSED [ 39%]
tests/test_requests.py::TestRequests::test_should_strip_auth_http_downgrade PASSED [ 39%]
tests/test_requests.py::TestRequests::test_should_strip_auth_https_upgrade PASSED [ 39%]
tests/test_requests.py::TestRequests::test_should_strip_auth_port_change PASSED [ 39%]
tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[https://example.com:443/foo-https://example.com/bar] PASSED [ 39%]
tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[http://example.com:80/foo-http://example.com/bar] PASSED [ 40%]
tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[https://example.com/foo-https://example.com:443/bar] PASSED [ 40%]
tests/test_requests.py::TestRequests::test_should_strip_auth_default_port[http://example.com/foo-http://example.com:80/bar] PASSED [ 40%]
tests/test_requests.py::TestRequests::test_manual_redirect_with_partial_body_read 127.0.0.1 - - [21/Aug/2025 18:18:05] "GET /get HTTP/1.1" 200 222
PASSED [ 40%]
tests/test_requests.py::TestRequests::test_prepare_body_position_non_stream PASSED [ 40%]
tests/test_requests.py::TestRequests::test_rewind_body PASSED [ 40%]
tests/test_requests.py::TestRequests::test_rewind_partially_read_body PASSED [ 40%]
tests/test_requests.py::TestRequests::test_rewind_body_no_seek PASSED [ 41%]
tests/test_requests.py::TestRequests::test_rewind_body_failed_seek PASSED [ 41%]
tests/test_requests.py::TestRequests::test_rewind_body_failed_tell PASSED [ 41%]
tests/test_requests.py::TestRequests::test_redirect_with_wrong_gzipped_header PASSED [ 41%]
tests/test_requests.py::TestRequests::test_basic_auth_str_is_always_native[test-test-Basic dGVzdDp0ZXN0] PASSED [ 41%]
tests/test_requests.py::TestRequests::test_basic_auth_str_is_always_native[\xd0\xb8\xd0\xbc\xd1\x8f-\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c-Basic 0LjQvNGPOtC/0LDRgNC+0LvRjA==] PASSED [ 41%]
tests/test_requests.py::TestRequests::test_requests_history_is_saved PASSED [ 42%]
tests/test_requests.py::TestRequests::test_json_param_post_content_type_works PASSED [ 42%]
tests/test_requests.py::TestRequests::test_json_param_post_should_not_override_data_param PASSED [ 42%]
tests/test_requests.py::TestRequests::test_response_iter_lines PASSED [ 42%]
tests/test_requests.py::TestRequests::test_response_context_manager PASSED [ 42%]
tests/test_requests.py::TestRequests::test_unconsumed_session_response_closes_connection PASSED [ 42%]
tests/test_requests.py::TestRequests::test_response_iter_lines_reentrant XFAIL [ 43%]
tests/test_requests.py::TestRequests::test_session_close_proxy_clear PASSED [ 43%]
tests/test_requests.py::TestRequests::test_proxy_auth PASSED [ 43%]
tests/test_requests.py::TestRequests::test_proxy_auth_empty_pass PASSED [ 43%]
tests/test_requests.py::TestRequests::test_response_json_when_content_is_None PASSED [ 43%]
tests/test_requests.py::TestRequests::test_response_without_release_conn PASSED [ 43%]
tests/test_requests.py::TestRequests::test_empty_stream_with_auth_does_not_set_content_length_header PASSED [ 44%]
tests/test_requests.py::TestRequests::test_stream_with_auth_does_not_set_transfer_encoding_header PASSED [ 44%]
tests/test_requests.py::TestRequests::test_chunked_upload_does_not_set_content_length_header PASSED [ 44%]
tests/test_requests.py::TestRequests::test_custom_redirect_mixin PASSED [ 44%]
tests/test_requests.py::TestCaseInsensitiveDict::test_init[cid0] PASSED [ 44%]
tests/test_requests.py::TestCaseInsensitiveDict::test_init[cid1] PASSED [ 44%]
tests/test_requests.py::TestCaseInsensitiveDict::test_init[cid2] PASSED [ 45%]
tests/test_requests.py::TestCaseInsensitiveDict::test_docstring_example PASSED [ 45%]
tests/test_requests.py::TestCaseInsensitiveDict::test_len PASSED [ 45%]
tests/test_requests.py::TestCaseInsensitiveDict::test_getitem PASSED [ 45%]
tests/test_requests.py::TestCaseInsensitiveDict::test_fixes_649 PASSED [ 45%]
tests/test_requests.py::TestCaseInsensitiveDict::test_delitem PASSED [ 45%]
tests/test_requests.py::TestCaseInsensitiveDict::test_contains PASSED [ 46%]
tests/test_requests.py::TestCaseInsensitiveDict::test_get PASSED [ 46%]
tests/test_requests.py::TestCaseInsensitiveDict::test_update PASSED [ 46%]
tests/test_requests.py::TestCaseInsensitiveDict::test_update_retains_unchanged PASSED [ 46%]
tests/test_requests.py::TestCaseInsensitiveDict::test_iter PASSED [ 46%]
tests/test_requests.py::TestCaseInsensitiveDict::test_equality PASSED [ 46%]
tests/test_requests.py::TestCaseInsensitiveDict::test_setdefault PASSED [ 47%]
tests/test_requests.py::TestCaseInsensitiveDict::test_lower_items PASSED [ 47%]
tests/test_requests.py::TestCaseInsensitiveDict::test_preserve_key_case PASSED [ 47%]
tests/test_requests.py::TestCaseInsensitiveDict::test_preserve_last_key_case PASSED [ 47%]
tests/test_requests.py::TestCaseInsensitiveDict::test_copy PASSED [ 47%]
tests/test_requests.py::TestMorselToCookieExpires::test_expires_valid_str PASSED [ 47%]
tests/test_requests.py::TestMorselToCookieExpires::test_expires_invalid_int[100-TypeError] PASSED [ 48%]
tests/test_requests.py::TestMorselToCookieExpires::test_expires_invalid_int[woops-ValueError] PASSED [ 48%]
tests/test_requests.py::TestMorselToCookieExpires::test_expires_none PASSED [ 48%]
tests/test_requests.py::TestMorselToCookieMaxAge::test_max_age_valid_int PASSED [ 48%]
tests/test_requests.py::TestMorselToCookieMaxAge::test_max_age_invalid_str PASSED [ 48%]
tests/test_requests.py::TestTimeout::test_stream_timeout PASSED [ 48%]
tests/test_requests.py::TestTimeout::test_invalid_timeout[timeout0-(connect, read)] PASSED [ 49%]
tests/test_requests.py::TestTimeout::test_invalid_timeout[foo-must be an int, float or None] PASSED [ 49%]
tests/test_requests.py::TestTimeout::test_none_timeout[None] PASSED [ 49%]
tests/test_requests.py::TestTimeout::test_none_timeout[timeout1] PASSED [ 49%]
tests/test_requests.py::TestTimeout::test_read_timeout[timeout0] PASSED [ 49%]
tests/test_requests.py::TestTimeout::test_read_timeout[timeout1] PASSED [ 49%]
tests/test_requests.py::TestTimeout::test_connect_timeout[timeout0] FAILED [ 50%]
tests/test_requests.py::TestTimeout::test_connect_timeout[timeout1] FAILED [ 50%]
tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout0] FAILED [ 50%]
tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout1] FAILED [ 50%]
tests/test_requests.py::TestTimeout::test_encoded_methods PASSED [ 50%]
tests/test_requests.py::test_json_encodes_as_bytes PASSED [ 50%]
tests/test_requests.py::test_requests_are_updated_each_time PASSED [ 50%]
tests/test_requests.py::test_proxy_env_vars_override_default[http_proxy-http://example.com-socks5://proxy.com:9876] PASSED [ 51%]
tests/test_requests.py::test_proxy_env_vars_override_default[https_proxy-https://example.com-socks5://proxy.com:9876] PASSED [ 51%]
tests/test_requests.py::test_proxy_env_vars_override_default[all_proxy-http://example.com-socks5://proxy.com:9876] PASSED [ 51%]
tests/test_requests.py::test_proxy_env_vars_override_default[all_proxy-https://example.com-socks5://proxy.com:9876] PASSED [ 51%]
tests/test_requests.py::test_data_argument_accepts_tuples[data0] PASSED [ 51%]
tests/test_requests.py::test_data_argument_accepts_tuples[data1] PASSED [ 51%]
tests/test_requests.py::test_data_argument_accepts_tuples[data2] PASSED [ 52%]
tests/test_requests.py::test_prepared_copy[None] PASSED [ 52%]
tests/test_requests.py::test_prepared_copy[kwargs1] PASSED [ 52%]
tests/test_requests.py::test_prepared_copy[kwargs2] PASSED [ 52%]
tests/test_requests.py::test_prepared_copy[kwargs3] PASSED [ 52%]
tests/test_requests.py::test_urllib3_retries PASSED [ 52%]
tests/test_requests.py::test_urllib3_pool_connection_closed PASSED [ 53%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://google.com-http://google.com/] PASSED [ 53%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://\u30b8\u30a7\u30fc\u30d4\u30fc\u30cb\u30c3\u30af.jp-http://xn--hckqz9bzb1cyrb.jp/] PASSED [ 53%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://xn--n3h.net/-http://xn--n3h.net/0] PASSED [ 53%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://\xe3\x82\xb8\xe3\x82\xa7\xe3\x83\xbc\xe3\x83\x94\xe3\x83\xbc\xe3\x83\x8b\xe3\x83\x83\xe3\x82\xaf.jp-http://xn--hckqz9bzb1cyrb.jp/] PASSED [ 53%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://stra\xdfe.de/stra\xdfe-http://xn--strae-oqa.de/stra%C3%9Fe] PASSED [ 53%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://stra\xc3\x9fe.de/stra\xc3\x9fe-http://xn--strae-oqa.de/stra%C3%9Fe] PASSED [ 54%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://K\xf6nigsg\xe4\xdfchen.de/stra\xdfe-http://xn--knigsgchen-b4a3dun.de/stra%C3%9Fe] PASSED [ 54%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://K\xc3\xb6nigsg\xc3\xa4\xc3\x9fchen.de/stra\xc3\x9fe-http://xn--knigsgchen-b4a3dun.de/stra%C3%9Fe] PASSED [ 54%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://xn--n3h.net/-http://xn--n3h.net/1] PASSED [ 54%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/-http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/0] PASSED [ 54%]
tests/test_requests.py::TestPreparingURLs::test_preparing_url[http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/-http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/1] PASSED [ 54%]
tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*.google.com0] PASSED [ 55%]
tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*0] PASSED [ 55%]
tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*.google.com1] PASSED [ 55%]
tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://*1] PASSED [ 55%]
tests/test_requests.py::TestPreparingURLs::test_preparing_bad_url[http://\u2603.net/] PASSED [ 55%]
tests/test_requests.py::TestPreparingURLs::test_redirecting_to_bad_url[http://:1-InvalidURL] PASSED [ 55%]
tests/test_requests.py::TestPreparingURLs::test_url_mutation[http+unix://%2Fvar%2Frun%2Fsocket/path%7E-http+unix://%2Fvar%2Frun%2Fsocket/path~0] PASSED [ 56%]
tests/test_requests.py::TestPreparingURLs::test_url_mutation[http+unix://%2Fvar%2Frun%2Fsocket/path%7E-http+unix://%2Fvar%2Frun%2Fsocket/path~1] PASSED [ 56%]
tests/test_requests.py::TestPreparingURLs::test_url_mutation[mailto:user@example.org-mailto:user@example.org0] PASSED [ 56%]
tests/test_requests.py::TestPreparingURLs::test_url_mutation[mailto:user@example.org-mailto:user@example.org1] PASSED [ 56%]
tests/test_requests.py::TestPreparingURLs::test_url_mutation[data:SSDimaUgUHl0aG9uIQ==-data:SSDimaUgUHl0aG9uIQ==] PASSED [ 56%]
tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[http+unix://%2Fvar%2Frun%2Fsocket/path-params0-http+unix://%2Fvar%2Frun%2Fsocket/path?key=value] PASSED [ 56%]
tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[http+unix://%2Fvar%2Frun%2Fsocket/path-params1-http+unix://%2Fvar%2Frun%2Fsocket/path?key=value] PASSED [ 57%]
tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[mailto:user@example.org-params2-mailto:user@example.org] PASSED [ 57%]
tests/test_requests.py::TestPreparingURLs::test_parameters_for_nonstandard_schemes[mailto:user@example.org-params3-mailto:user@example.org] PASSED [ 57%]
tests/test_requests.py::TestPreparingURLs::test_post_json_nan PASSED [ 57%]
tests/test_requests.py::TestPreparingURLs::test_json_decode_compatibility PASSED [ 57%]
tests/test_requests.py::TestPreparingURLs::test_json_decode_persists_doc_attr PASSED [ 57%]
tests/test_requests.py::TestPreparingURLs::test_status_code_425 PASSED [ 58%]
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_True PASSED [ 58%]
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert PASSED [ 58%]
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert PASSED [ 58%]
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings PASSED [ 58%]
tests/test_requests.py::test_content_length_for_bytes_data PASSED [ 58%]
tests/test_requests.py::test_content_length_for_string_data_counts_bytes PASSED [ 59%]
tests/test_requests.py::test_json_decode_errors_are_serializable_deserializable PASSED [ 59%]
tests/test_structures.py::TestCaseInsensitiveDict::test_list PASSED [ 59%]
tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[accept] PASSED [ 59%]
tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[ACCEPT] PASSED [ 59%]
tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[aCcEpT] PASSED [ 59%]
tests/test_structures.py::TestCaseInsensitiveDict::test_getitem[Accept] PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[accept] PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[ACCEPT] PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[aCcEpT] PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_delitem[Accept] PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_lower_items PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_repr PASSED [ 60%]
tests/test_structures.py::TestCaseInsensitiveDict::test_copy PASSED [ 61%]
tests/test_structures.py::TestCaseInsensitiveDict::test_instance_equality[other0-True] PASSED [ 61%]
tests/test_structures.py::TestCaseInsensitiveDict::test_instance_equality[other1-False] PASSED [ 61%]
tests/test_structures.py::TestCaseInsensitiveDict::test_instance_equality[None-False] PASSED [ 61%]
tests/test_structures.py::TestLookupDict::test_repr PASSED [ 61%]
tests/test_structures.py::TestLookupDict::test_getitem[bad_gateway-502] PASSED [ 61%]
tests/test_structures.py::TestLookupDict::test_getitem[not_a_key-None] PASSED [ 62%]
tests/test_structures.py::TestLookupDict::test_get[bad_gateway-502] PASSED [ 62%]
tests/test_structures.py::TestLookupDict::test_get[not_a_key-None] PASSED [ 62%]
tests/test_testserver.py::TestTestServer::test_basic PASSED [ 62%]
tests/test_testserver.py::TestTestServer::test_server_closes PASSED [ 62%]
tests/test_testserver.py::TestTestServer::test_text_response PASSED [ 62%]
tests/test_testserver.py::TestTestServer::test_basic_response PASSED [ 63%]
tests/test_testserver.py::TestTestServer::test_basic_waiting_server PASSED [ 63%]
tests/test_testserver.py::TestTestServer::test_multiple_requests PASSED [ 63%]
tests/test_testserver.py::TestTestServer::test_request_recovery SKIPPED [ 63%]
tests/test_testserver.py::TestTestServer::test_requests_after_timeout_are_not_received PASSED [ 63%]
tests/test_testserver.py::TestTestServer::test_request_recovery_with_bigger_timeout PASSED [ 63%]
tests/test_testserver.py::TestTestServer::test_server_finishes_on_error PASSED [ 64%]
tests/test_testserver.py::TestTestServer::test_server_finishes_when_no_connections PASSED [ 64%]
tests/test_utils.py::TestSuperLen::test_io_streams[StringIO-Test] PASSED [ 64%]
tests/test_utils.py::TestSuperLen::test_io_streams[BytesIO-Test] PASSED [ 64%]
tests/test_utils.py::TestSuperLen::test_io_streams[None-Test] SKIPPED [ 64%]
tests/test_utils.py::TestSuperLen::test_super_len_correctly_calculates_len_of_partially_read_file PASSED [ 64%]
tests/test_utils.py::TestSuperLen::test_super_len_handles_files_raising_weird_errors_in_tell[OSError0] PASSED [ 65%]
tests/test_utils.py::TestSuperLen::test_super_len_handles_files_raising_weird_errors_in_tell[OSError1] PASSED [ 65%]
tests/test_utils.py::TestSuperLen::test_super_len_tell_ioerror[OSError0] PASSED [ 65%]
tests/test_utils.py::TestSuperLen::test_super_len_tell_ioerror[OSError1] PASSED [ 65%]
tests/test_utils.py::TestSuperLen::test_string PASSED [ 65%]
tests/test_utils.py::TestSuperLen::test_file[r-1] PASSED [ 65%]
tests/test_utils.py::TestSuperLen::test_file[rb-0] PASSED [ 66%]
tests/test_utils.py::TestSuperLen::test_tarfile_member PASSED [ 66%]
tests/test_utils.py::TestSuperLen::test_super_len_with__len__ PASSED [ 66%]
tests/test_utils.py::TestSuperLen::test_super_len_with_no__len__ PASSED [ 66%]
tests/test_utils.py::TestSuperLen::test_super_len_with_tell PASSED [ 66%]
tests/test_utils.py::TestSuperLen::test_super_len_with_fileno PASSED [ 66%]
tests/test_utils.py::TestSuperLen::test_super_len_with_no_matches PASSED [ 67%]
tests/test_utils.py::TestGetNetrcAuth::test_works PASSED [ 67%]
tests/test_utils.py::TestGetNetrcAuth::test_not_vulnerable_to_bad_url_parsing PASSED [ 67%]
tests/test_utils.py::TestToKeyValList::test_valid[value0-expected0] PASSED [ 67%]
tests/test_utils.py::TestToKeyValList::test_valid[value1-expected1] PASSED [ 67%]
tests/test_utils.py::TestToKeyValList::test_valid[value2-expected2] PASSED [ 67%]
tests/test_utils.py::TestToKeyValList::test_valid[None-None] PASSED [ 68%]
tests/test_utils.py::TestToKeyValList::test_invalid PASSED [ 68%]
tests/test_utils.py::TestUnquoteHeaderValue::test_valid[None-None] PASSED [ 68%]
tests/test_utils.py::TestUnquoteHeaderValue::test_valid[Test-Test] PASSED [ 68%]
tests/test_utils.py::TestUnquoteHeaderValue::test_valid["Test"-Test] PASSED [ 68%]
tests/test_utils.py::TestUnquoteHeaderValue::test_valid["Test\\\\"-Test\\] PASSED [ 68%]
tests/test_utils.py::TestUnquoteHeaderValue::test_valid["\\\\Comp\\Res"-\\Comp\\Res] PASSED [ 69%]
tests/test_utils.py::TestUnquoteHeaderValue::test_is_filename PASSED [ 69%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://192.168.0.1:5000/] PASSED [ 69%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://192.168.0.1/] PASSED [ 69%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://172.16.1.1/] PASSED [ 69%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://172.16.1.1:5000/] PASSED [ 69%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[no_proxy-http://localhost.localdomain:5000/v1.0/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://192.168.0.1:5000/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://192.168.0.1/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://172.16.1.1/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://172.16.1.1:5000/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass[NO_PROXY-http://localhost.localdomain:5000/v1.0/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[no_proxy-http://192.168.1.1:5000/] PASSED [ 70%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[no_proxy-http://192.168.1.1/] PASSED [ 71%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[no_proxy-http://www.requests.com/] PASSED [ 71%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[NO_PROXY-http://192.168.1.1:5000/] PASSED [ 71%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[NO_PROXY-http://192.168.1.1/] PASSED [ 71%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass[NO_PROXY-http://www.requests.com/] PASSED [ 71%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[no_proxy-http://192.168.1.1:5000/] PASSED [ 71%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[no_proxy-http://192.168.1.1/] PASSED [ 72%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[no_proxy-http://www.requests.com/] PASSED [ 72%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[NO_PROXY-http://192.168.1.1:5000/] PASSED [ 72%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[NO_PROXY-http://192.168.1.1/] PASSED [ 72%]
tests/test_utils.py::TestGetEnvironProxies::test_bypass_no_proxy_keyword[NO_PROXY-http://www.requests.com/] PASSED [ 72%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://192.168.0.1:5000/] PASSED [ 72%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://192.168.0.1/] PASSED [ 73%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://172.16.1.1/] PASSED [ 73%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://172.16.1.1:5000/] PASSED [ 73%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[no_proxy-http://localhost.localdomain:5000/v1.0/] PASSED [ 73%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://192.168.0.1:5000/] PASSED [ 73%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://192.168.0.1/] PASSED [ 73%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://172.16.1.1/] PASSED [ 74%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://172.16.1.1:5000/] PASSED [ 74%]
tests/test_utils.py::TestGetEnvironProxies::test_not_bypass_no_proxy_keyword[NO_PROXY-http://localhost.localdomain:5000/v1.0/] PASSED [ 74%]
tests/test_utils.py::TestIsIPv4Address::test_valid PASSED [ 74%]
tests/test_utils.py::TestIsIPv4Address::test_invalid[8.8.8.8.8] PASSED [ 74%]
tests/test_utils.py::TestIsIPv4Address::test_invalid[localhost.localdomain] PASSED [ 74%]
tests/test_utils.py::TestIsValidCIDR::test_valid PASSED [ 75%]
tests/test_utils.py::TestIsValidCIDR::test_invalid[8.8.8.8] PASSED [ 75%]
tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.0/a] PASSED [ 75%]
tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.0/128] PASSED [ 75%]
tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.0/-1] PASSED [ 75%]
tests/test_utils.py::TestIsValidCIDR::test_invalid[192.168.1.999/24] PASSED [ 75%]
tests/test_utils.py::TestAddressInNetwork::test_valid PASSED [ 76%]
tests/test_utils.py::TestAddressInNetwork::test_invalid PASSED [ 76%]
tests/test_utils.py::TestGuessFilename::test_guess_filename_invalid[1] PASSED [ 76%]
tests/test_utils.py::TestGuessFilename::test_guess_filename_invalid[value1] PASSED [ 76%]
tests/test_utils.py::TestGuessFilename::test_guess_filename_valid[value-bytes] PASSED [ 76%]
tests/test_utils.py::TestGuessFilename::test_guess_filename_valid[value-str] PASSED [ 76%]
tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/] PASSED [ 77%]
tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/build/python-requests/src/requests/tests/test_utils.py] PASSED [ 77%]
tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/usr/lib/python3.13/site-packages/pytest/__init__.py] PASSED [ 77%]
tests/test_utils.py::TestExtractZippedPaths::test_unzipped_paths_unchanged[/etc/invalid/location] PASSED [ 77%]
tests/test_utils.py::TestExtractZippedPaths::test_zipped_paths_extracted PASSED [ 77%]
tests/test_utils.py::TestExtractZippedPaths::test_invalid_unc_path PASSED [ 77%]
tests/test_utils.py::TestContentEncodingDetection::test_none PASSED [ 78%]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[] PASSED [ 78%]
tests/test_utils.py::TestContentEncodingDetection::test_precedence PASSED [ 78%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-32] PASSED [ 79%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-8-sig] PASSED [ 79%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-16] PASSED [ 79%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-8] PASSED [ 79%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-16-be] PASSED [ 79%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-16-le] PASSED [ 79%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-32-be] PASSED [ 80%]
tests/test_utils.py::TestGuessJSONUTF::test_encoded[utf-32-le] PASSED [ 80%]
tests/test_utils.py::TestGuessJSONUTF::test_bad_utf_like_encoding PASSED [ 80%]
tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-16-be-utf-16] PASSED [ 80%]
tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-16-le-utf-16] PASSED [ 80%]
tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-32-be-utf-32] PASSED [ 80%]
tests/test_utils.py::TestGuessJSONUTF::test_guess_by_bom[utf-32-le-utf-32] PASSED [ 80%]
tests/test_utils.py::test_get_auth_from_url[http://%25%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%20:%25%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%20@request.com/url.html#test-auth0] PASSED [ 81%]
tests/test_utils.py::test_get_auth_from_url[http://user:pass@complex.url.com/path?query=yes-auth1] PASSED [ 81%]
tests/test_utils.py::test_get_auth_from_url[http://user:pass%20pass@complex.url.com/path?query=yes-auth2] PASSED [ 81%]
tests/test_utils.py::test_get_auth_from_url[http://user:pass pass@complex.url.com/path?query=yes-auth3] PASSED [ 81%]
tests/test_utils.py::test_get_auth_from_url[http://user%25user:pass@complex.url.com/path?query=yes-auth4] PASSED [ 81%]
tests/test_utils.py::test_get_auth_from_url[http://user:pass%23pass@complex.url.com/path?query=yes-auth5] PASSED [ 81%]
tests/test_utils.py::test_get_auth_from_url[http://complex.url.com/path?query=yes-auth6] PASSED [ 82%]
tests/test_utils.py::test_requote_uri_with_unquoted_percents[http://example.com/fiz?buz=%25ppicture-http://example.com/fiz?buz=%25ppicture] PASSED [ 82%]
tests/test_utils.py::test_requote_uri_with_unquoted_percents[http://example.com/fiz?buz=%ppicture-http://example.com/fiz?buz=%25ppicture] PASSED [ 82%]
tests/test_utils.py::test_unquote_unreserved[http://example.com/?a=%---http://example.com/?a=%--] PASSED [ 82%]
tests/test_utils.py::test_unquote_unreserved[http://example.com/?a=%300-http://example.com/?a=00] PASSED [ 82%]
tests/test_utils.py::test_dotted_netmask[8-255.0.0.0] PASSED [ 82%]
tests/test_utils.py::test_dotted_netmask[24-255.255.255.0] PASSED [ 83%]
tests/test_utils.py::test_dotted_netmask[25-255.255.255.128] PASSED [ 83%]
tests/test_utils.py::test_select_proxies[hTTp://u:p@Some.Host/path-http://some.host.proxy-proxies0] PASSED [ 83%]
tests/test_utils.py::test_select_proxies[hTTp://u:p@Other.Host/path-http://http.proxy-proxies1] PASSED [ 83%]
tests/test_utils.py::test_select_proxies[hTTp:///path-http://http.proxy-proxies2] PASSED [ 83%]
tests/test_utils.py::test_select_proxies[hTTps://Other.Host-None-proxies3] PASSED [ 83%]
tests/test_utils.py::test_select_proxies[file:///etc/motd-None-proxies4] PASSED [ 84%]
tests/test_utils.py::test_select_proxies[hTTp://u:p@Some.Host/path-socks5://some.host.proxy-proxies5] PASSED [ 84%]
tests/test_utils.py::test_select_proxies[hTTp://u:p@Other.Host/path-socks5://http.proxy-proxies6] PASSED [ 84%]
tests/test_utils.py::test_select_proxies[hTTp:///path-socks5://http.proxy-proxies7] PASSED [ 84%]
tests/test_utils.py::test_select_proxies[hTTps://Other.Host-socks5://http.proxy-proxies8] PASSED [ 84%]
tests/test_utils.py::test_select_proxies[http://u:p@other.host/path-http://http.proxy-proxies9] PASSED [ 84%]
tests/test_utils.py::test_select_proxies[http://u:p@some.host/path-http://some.host.proxy-proxies10] PASSED [ 85%]
tests/test_utils.py::test_select_proxies[https://u:p@other.host/path-socks5://http.proxy-proxies11] PASSED [ 85%]
tests/test_utils.py::test_select_proxies[https://u:p@some.host/path-socks5://http.proxy-proxies12] PASSED [ 85%]
tests/test_utils.py::test_select_proxies[https://-socks5://http.proxy-proxies13] PASSED [ 85%]
tests/test_utils.py::test_select_proxies[file:///etc/motd-socks5://http.proxy-proxies14] PASSED [ 85%]
tests/test_utils.py::test_parse_dict_header[foo="is a fish", bar="as well"-expected0] PASSED [ 85%]
tests/test_utils.py::test_parse_dict_header[key_without_value-expected1] PASSED [ 86%]
tests/test_utils.py::test__parse_content_type_header[application/xml-expected0] PASSED [ 86%]
tests/test_utils.py::test__parse_content_type_header[application/json ; charset=utf-8-expected1] PASSED [ 86%]
tests/test_utils.py::test__parse_content_type_header[application/json ; Charset=utf-8-expected2] PASSED [ 86%]
tests/test_utils.py::test__parse_content_type_header[text/plain-expected3] PASSED [ 86%]
tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; boundary2='something_else' ; no_equals -expected4] PASSED [ 86%]
tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; boundary2="something_else" ; no_equals -expected5] PASSED [ 87%]
tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; 'boundary2=something_else' ; no_equals -expected6] PASSED [ 87%]
tests/test_utils.py::test__parse_content_type_header[multipart/form-data; boundary = something ; "boundary2=something_else" ; no_equals -expected7] PASSED [ 87%]
tests/test_utils.py::test__parse_content_type_header[application/json ; ; -expected8] PASSED [ 87%]
tests/test_utils.py::test_get_encoding_from_headers[value0-None] PASSED [ 87%]
tests/test_utils.py::test_get_encoding_from_headers[value1-utf-8] PASSED [ 87%]
tests/test_utils.py::test_get_encoding_from_headers[value2-ISO-8859-1] PASSED [ 88%]
tests/test_utils.py::test_iter_slices[-0] PASSED [ 88%]
tests/test_utils.py::test_iter_slices[T-1] PASSED [ 88%]
tests/test_utils.py::test_iter_slices[Test-4] PASSED [ 88%]
tests/test_utils.py::test_iter_slices[Cont-0] PASSED [ 88%]
tests/test_utils.py::test_iter_slices[Other--5] PASSED [ 88%]
tests/test_utils.py::test_iter_slices[Content-None] PASSED [ 89%]
tests/test_utils.py::test_parse_header_links[; rel=front; type="image/jpeg"-expected0] PASSED [ 89%]
tests/test_utils.py::test_parse_header_links[-expected1] PASSED [ 89%]
tests/test_utils.py::test_parse_header_links[;-expected2] PASSED [ 89%]
tests/test_utils.py::test_parse_header_links[; type="image/jpeg",;-expected3] PASSED [ 89%]
tests/test_utils.py::test_parse_header_links[-expected4] PASSED [ 89%]
tests/test_utils.py::test_prepend_scheme_if_needed[example.com/path-http://example.com/path] PASSED [ 90%]
tests/test_utils.py::test_prepend_scheme_if_needed[//example.com/path-http://example.com/path] PASSED [ 90%]
tests/test_utils.py::test_prepend_scheme_if_needed[example.com:80-http://example.com:80] PASSED [ 90%]
tests/test_utils.py::test_prepend_scheme_if_needed[http://user:pass@example.com/path?query-http://user:pass@example.com/path?query] PASSED [ 90%]
tests/test_utils.py::test_prepend_scheme_if_needed[http://user@example.com/path?query-http://user@example.com/path?query] PASSED [ 90%]
tests/test_utils.py::test_to_native_string[T-T0] PASSED [ 90%]
tests/test_utils.py::test_to_native_string[T-T1] PASSED [ 90%]
tests/test_utils.py::test_to_native_string[T-T2] PASSED [ 91%]
tests/test_utils.py::test_urldefragauth[http://u:p@example.com/path?a=1#test-http://example.com/path?a=1] PASSED [ 91%]
tests/test_utils.py::test_urldefragauth[http://example.com/path-http://example.com/path] PASSED [ 91%]
tests/test_utils.py::test_urldefragauth[//u:p@example.com/path-//example.com/path] PASSED [ 91%]
tests/test_utils.py::test_urldefragauth[//example.com/path-//example.com/path] PASSED [ 91%]
tests/test_utils.py::test_urldefragauth[example.com/path-//example.com/path] PASSED [ 91%]
tests/test_utils.py::test_urldefragauth[scheme:u:p@example.com/path-scheme://example.com/path] PASSED [ 92%]
tests/test_utils.py::test_should_bypass_proxies[http://192.168.0.1:5000/-True] PASSED [ 92%]
tests/test_utils.py::test_should_bypass_proxies[http://192.168.0.1/-True] PASSED [ 92%]
tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.1/-True] PASSED [ 92%]
tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.1:5000/-True] PASSED [ 92%]
tests/test_utils.py::test_should_bypass_proxies[http://localhost.localdomain:5000/v1.0/-True] PASSED [ 92%]
tests/test_utils.py::test_should_bypass_proxies[http://google.com:6000/-True] PASSED [ 93%]
tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.12/-False] PASSED [ 93%]
tests/test_utils.py::test_should_bypass_proxies[http://172.16.1.12:5000/-False] PASSED [ 93%]
tests/test_utils.py::test_should_bypass_proxies[http://google.com:5000/v1.0/-False] PASSED [ 93%]
tests/test_utils.py::test_should_bypass_proxies[file:///some/path/on/disk-True] PASSED [ 93%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://172.16.1.1/-172.16.1.1] PASSED [ 93%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://172.16.1.1:5000/-172.16.1.1] PASSED [ 94%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@172.16.1.1-172.16.1.1] PASSED [ 94%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@172.16.1.1:5000-172.16.1.1] PASSED [ 94%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://hostname/-hostname] PASSED [ 94%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://hostname:5000/-hostname] PASSED [ 94%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@hostname-hostname] PASSED [ 94%]
tests/test_utils.py::test_should_bypass_proxies_pass_only_hostname[http://user:pass@hostname:5000-hostname] PASSED [ 95%]
tests/test_utils.py::test_add_dict_to_cookiejar[cookiejar0] PASSED [ 95%]
tests/test_utils.py::test_add_dict_to_cookiejar[cookiejar1] PASSED [ 95%]
tests/test_utils.py::test_unicode_is_ascii[test-True] PASSED [ 95%]
tests/test_utils.py::test_unicode_is_ascii[\xe6\xed\xf6\xfb-False] PASSED [ 95%]
tests/test_utils.py::test_unicode_is_ascii[\u30b8\u30a7\u30fc\u30d4\u30fc\u30cb\u30c3\u30af-False] PASSED [ 95%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://192.168.0.1:5000/-True] PASSED [ 96%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://192.168.0.1/-True] PASSED [ 96%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.1/-True] PASSED [ 96%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.1:5000/-True] PASSED [ 96%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://localhost.localdomain:5000/v1.0/-True] PASSED [ 96%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.12/-False] PASSED [ 96%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://172.16.1.12:5000/-False] PASSED [ 97%]
tests/test_utils.py::test_should_bypass_proxies_no_proxy[http://google.com:5000/v1.0/-False] PASSED [ 97%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://192.168.0.1:5000/-True-None] SKIPPED [ 97%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://192.168.0.1/-True-None] SKIPPED [ 97%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.1/-True-None] SKIPPED [ 97%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.1:5000/-True-None] SKIPPED [ 97%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://localhost.localdomain:5000/v1.0/-True-None] SKIPPED [ 98%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.22/-False-None] SKIPPED [ 98%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://172.16.1.22:5000/-False-None] SKIPPED [ 98%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://google.com:5000/v1.0/-False-None] SKIPPED [ 98%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://mylocalhostname:5000/v1.0/-True-] SKIPPED [ 98%]
tests/test_utils.py::test_should_bypass_proxies_win_registry[http://192.168.0.1/-False-] SKIPPED [ 98%]
tests/test_utils.py::test_should_bypass_proxies_win_registry_bad_values SKIPPED [ 99%]
tests/test_utils.py::test_set_environ[no_proxy-192.168.0.0/24,127.0.0.1,localhost.localdomain] PASSED [ 99%]
tests/test_utils.py::test_set_environ[no_proxy-None] PASSED [ 99%]
tests/test_utils.py::test_set_environ[a_new_key-192.168.0.0/24,127.0.0.1,localhost.localdomain] PASSED [ 99%]
tests/test_utils.py::test_set_environ[a_new_key-None] PASSED [ 99%]
tests/test_utils.py::test_set_environ_raises_exception PASSED [ 99%]
tests/test_utils.py::test_should_bypass_proxies_win_registry_ProxyOverride_value SKIPPED [100%]
=================================== FAILURES ===================================
__________________ TestTimeout.test_connect_timeout[timeout0] __________________
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
> sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
/usr/lib/python3.13/site-packages/urllib3/connection.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection
raise err
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
address = ('10.255.255.1', 80), timeout = 0.1, source_address = None
socket_options = [(6, 1, 1)]
def create_connection(
address: tuple[str, int],
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
source_address: tuple[str, int] | None = None,
socket_options: _TYPE_SOCKET_OPTIONS | None = None,
) -> socket.socket:
"""Connect to *address* and return the socket object.
Convenience function. Connect to *address* (a 2-tuple ``(host,
port)``) and return the socket object. Passing the optional
*timeout* parameter will set the timeout on the socket instance
before attempting to connect. If no *timeout* is supplied, the
global default timeout setting returned by :func:`socket.getdefaulttimeout`
is used. If *source_address* is set it must be a tuple of (host, port)
for the socket to bind as a source address before making the connection.
An host of '' or port 0 tells the OS to use the default.
"""
host, port = address
if host.startswith("["):
host = host.strip("[]")
err = None
# Using the value from allowed_gai_family() in the context of getaddrinfo lets
# us select whether to work with IPv4 DNS records, IPv6 records, or both.
# The original create_connection function always returns all records.
family = allowed_gai_family()
try:
host.encode("idna")
except UnicodeError:
raise LocationParseError(f"'{host}', label empty or too long") from None
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
try:
sock = socket.socket(af, socktype, proto)
# If provided, set socket level options before connecting.
_set_socket_options(sock, socket_options)
if timeout is not _DEFAULT_TIMEOUT:
sock.settimeout(timeout)
if source_address:
sock.bind(source_address)
> sock.connect(sa)
E ConnectionRefusedError: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError
The above exception was the direct cause of the following exception:
self =
method = 'GET', url = '/', body = None
headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}
retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
redirect = False, assert_same_host = False
timeout = Timeout(connect=0.1, read=None, total=None), pool_timeout = None
release_conn = False, chunked = False, body_pos = None, preload_content = False
decode_content = False, response_kw = {}
parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None)
destination_scheme = None, conn = None, release_this_conn = True
http_tunnel_required = False, err = None, clean_exit = False
def urlopen( # type: ignore[override]
self,
method: str,
url: str,
body: _TYPE_BODY | None = None,
headers: typing.Mapping[str, str] | None = None,
retries: Retry | bool | int | None = None,
redirect: bool = True,
assert_same_host: bool = True,
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
pool_timeout: int | None = None,
release_conn: bool | None = None,
chunked: bool = False,
body_pos: _TYPE_BODY_POSITION | None = None,
preload_content: bool = True,
decode_content: bool = True,
**response_kw: typing.Any,
) -> BaseHTTPResponse:
"""
Get a connection from the pool and perform an HTTP request. This is the
lowest level call for making a request, so you'll need to specify all
the raw details.
.. note::
More commonly, it's appropriate to use a convenience method
such as :meth:`request`.
.. note::
`release_conn` will only behave as expected if
`preload_content=False` because we want to make
`preload_content=False` the default behaviour someday soon without
breaking backwards compatibility.
:param method:
HTTP request method (such as GET, POST, PUT, etc.)
:param url:
The URL to perform the request on.
:param body:
Data to send in the request body, either :class:`str`, :class:`bytes`,
an iterable of :class:`str`/:class:`bytes`, or a file-like object.
:param headers:
Dictionary of custom headers to send, such as User-Agent,
If-None-Match, etc. If None, pool headers are used. If provided,
these headers completely replace any pool-specific headers.
:param retries:
Configure the number of retries to allow before raising a
:class:`~urllib3.exceptions.MaxRetryError` exception.
If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a
:class:`~urllib3.util.retry.Retry` object for fine-grained control
over different types of retries.
Pass an integer number to retry connection errors that many times,
but no other types of errors. Pass zero to never retry.
If ``False``, then retries are disabled and any exception is raised
immediately. Also, instead of raising a MaxRetryError on redirects,
the redirect response will be returned.
:type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
:param redirect:
If True, automatically handle redirects (status codes 301, 302,
303, 307, 308). Each redirect counts as a retry. Disabling retries
will disable redirect, too.
:param assert_same_host:
If ``True``, will make sure that the host of the pool requests is
consistent else will raise HostChangedError. When ``False``, you can
use the pool on an HTTP proxy and request foreign hosts.
:param timeout:
If specified, overrides the default timeout for this one
request. It may be a float (in seconds) or an instance of
:class:`urllib3.util.Timeout`.
:param pool_timeout:
If set and the pool is set to block=True, then this method will
block for ``pool_timeout`` seconds and raise EmptyPoolError if no
connection is available within the time period.
:param bool preload_content:
If True, the response's body will be preloaded into memory.
:param bool decode_content:
If True, will attempt to decode the body based on the
'content-encoding' header.
:param release_conn:
If False, then the urlopen call will not release the connection
back into the pool once a response is received (but will release if
you read the entire contents of the response such as when
`preload_content=True`). This is useful if you're not preloading
the response's content immediately. You will need to call
``r.release_conn()`` on the response ``r`` to return the connection
back into the pool. If None, it takes the value of ``preload_content``
which defaults to ``True``.
:param bool chunked:
If True, urllib3 will send the body using chunked transfer
encoding. Otherwise, urllib3 will send the body using the standard
content-length form. Defaults to False.
:param int body_pos:
Position to seek to in file-like body in the event of a retry or
redirect. Typically this won't need to be set because urllib3 will
auto-populate the value when needed.
"""
parsed_url = parse_url(url)
destination_scheme = parsed_url.scheme
if headers is None:
headers = self.headers
if not isinstance(retries, Retry):
retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
if release_conn is None:
release_conn = preload_content
# Check host
if assert_same_host and not self.is_same_host(url):
raise HostChangedError(self, url, retries)
# Ensure that the URL we're connecting to is properly encoded
if url.startswith("/"):
url = to_str(_encode_target(url))
else:
url = to_str(parsed_url.url)
conn = None
# Track whether `conn` needs to be released before
# returning/raising/recursing. Update this variable if necessary, and
# leave `release_conn` constant throughout the function. That way, if
# the function recurses, the original value of `release_conn` will be
# passed down into the recursive call, and its value will be respected.
#
# See issue #651 [1] for details.
#
# [1]
release_this_conn = release_conn
http_tunnel_required = connection_requires_http_tunnel(
self.proxy, self.proxy_config, destination_scheme
)
# Merge the proxy headers. Only done when not using HTTP CONNECT. We
# have to copy the headers dict so we can safely change it without those
# changes being reflected in anyone else's copy.
if not http_tunnel_required:
headers = headers.copy() # type: ignore[attr-defined]
headers.update(self.proxy_headers) # type: ignore[union-attr]
# Must keep the exception bound to a separate variable or else Python 3
# complains about UnboundLocalError.
err = None
# Keep track of whether we cleanly exited the except block. This
# ensures we do proper cleanup in finally.
clean_exit = False
# Rewind body position, if needed. Record current position
# for future rewinds in the event of a redirect/retry.
body_pos = set_file_position(body, body_pos)
try:
# Request a connection from the queue.
timeout_obj = self._get_timeout(timeout)
conn = self._get_conn(timeout=pool_timeout)
conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment]
# Is this a closed/new connection that requires CONNECT tunnelling?
if self.proxy is not None and http_tunnel_required and conn.is_closed:
try:
self._prepare_proxy(conn)
except (BaseSSLError, OSError, SocketTimeout) as e:
self._raise_timeout(
err=e, url=self.proxy.url, timeout_value=conn.timeout
)
raise
# If we're going to release the connection in ``finally:``, then
# the response doesn't need to know about the connection. Otherwise
# it will also try to release it and we'll have a double-release
# mess.
response_conn = conn if not release_conn else None
# Make the request on the HTTPConnection object
> response = self._make_request(
conn,
method,
url,
timeout=timeout_obj,
body=body,
headers=headers,
chunked=chunked,
retries=retries,
response_conn=response_conn,
preload_content=preload_content,
decode_content=decode_content,
**response_kw,
)
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request
conn.request(
/usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request
self.endheaders()
/usr/lib/python3.13/http/client.py:1333: in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
/usr/lib/python3.13/http/client.py:1093: in _send_output
self.send(msg)
/usr/lib/python3.13/http/client.py:1037: in send
self.connect()
/usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect
self.sock = self._new_conn()
^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
except socket.gaierror as e:
raise NameResolutionError(self.host, self, e) from e
except SocketTimeout as e:
raise ConnectTimeoutError(
self,
f"Connection to {self.host} timed out. (connect timeout={self.timeout})",
) from e
except OSError as e:
> raise NewConnectionError(
self, f"Failed to establish a new connection: {e}"
) from e
E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError
The above exception was the direct cause of the following exception:
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=None, total=None), verify = True
cert = None, proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
> resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
src/requests/adapters.py:644:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen
retries = retries.increment(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
method = 'GET', url = '/', response = None
error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')
_pool =
_stacktrace =
def increment(
self,
method: str | None = None,
url: str | None = None,
response: BaseHTTPResponse | None = None,
error: Exception | None = None,
_pool: ConnectionPool | None = None,
_stacktrace: TracebackType | None = None,
) -> Self:
"""Return a new Retry object with incremented retry counters.
:param response: A response object, or None, if the server did not
return a response.
:type response: :class:`~urllib3.response.BaseHTTPResponse`
:param Exception error: An error encountered during the request, or
None if the response was received successfully.
:return: A new ``Retry`` object.
"""
if self.total is False and error:
# Disabled, indicate to re-raise the error.
raise reraise(type(error), error, _stacktrace)
total = self.total
if total is not None:
total -= 1
connect = self.connect
read = self.read
redirect = self.redirect
status_count = self.status
other = self.other
cause = "unknown"
status = None
redirect_location = None
if error and self._is_connection_error(error):
# Connect retry?
if connect is False:
raise reraise(type(error), error, _stacktrace)
elif connect is not None:
connect -= 1
elif error and self._is_read_error(error):
# Read retry?
if read is False or method is None or not self._is_method_retryable(method):
raise reraise(type(error), error, _stacktrace)
elif read is not None:
read -= 1
elif error:
# Other retry?
if other is not None:
other -= 1
elif response and response.get_redirect_location():
# Redirect retry?
if redirect is not None:
redirect -= 1
cause = "too many redirects"
response_redirect_location = response.get_redirect_location()
if response_redirect_location:
redirect_location = response_redirect_location
status = response.status
else:
# Incrementing because of a server error like a 500 in
# status_forcelist and the given method is in the allowed_methods
cause = ResponseError.GENERIC_ERROR
if response and response.status:
if status_count is not None:
status_count -= 1
cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)
status = response.status
history = self.history + (
RequestHistory(method, url, error, status, redirect_location),
)
new_retry = self.new(
total=total,
connect=connect,
read=read,
redirect=redirect,
status=status_count,
other=other,
history=history,
)
if new_retry.is_exhausted():
reason = error or ResponseError(cause)
> raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
/usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError
During handling of the above exception, another exception occurred:
self =
timeout = (0.1, None)
@pytest.mark.parametrize(
"timeout", ((0.1, None), Urllib3Timeout(connect=0.1, read=None))
)
def test_connect_timeout(self, timeout):
try:
> requests.get(TARPIT, timeout=timeout)
tests/test_requests.py:2530:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/requests/api.py:73: in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/api.py:59: in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:589: in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:703: in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=None, total=None), verify = True
cert = None, proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
except (ProtocolError, OSError) as err:
raise ConnectionError(err, request=request)
except MaxRetryError as e:
if isinstance(e.reason, ConnectTimeoutError):
# TODO: Remove this in 3.0.0: see #2811
if not isinstance(e.reason, NewConnectionError):
raise ConnectTimeout(e, request=request)
if isinstance(e.reason, ResponseError):
raise RetryError(e, request=request)
if isinstance(e.reason, _ProxyError):
raise ProxyError(e, request=request)
if isinstance(e.reason, _SSLError):
# This branch is for urllib3 v1.22 and later.
raise SSLError(e, request=request)
> raise ConnectionError(e, request=request)
E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
src/requests/adapters.py:677: ConnectionError
__________________ TestTimeout.test_connect_timeout[timeout1] __________________
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
> sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
/usr/lib/python3.13/site-packages/urllib3/connection.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection
raise err
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
address = ('10.255.255.1', 80), timeout = 0.1, source_address = None
socket_options = [(6, 1, 1)]
def create_connection(
address: tuple[str, int],
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
source_address: tuple[str, int] | None = None,
socket_options: _TYPE_SOCKET_OPTIONS | None = None,
) -> socket.socket:
"""Connect to *address* and return the socket object.
Convenience function. Connect to *address* (a 2-tuple ``(host,
port)``) and return the socket object. Passing the optional
*timeout* parameter will set the timeout on the socket instance
before attempting to connect. If no *timeout* is supplied, the
global default timeout setting returned by :func:`socket.getdefaulttimeout`
is used. If *source_address* is set it must be a tuple of (host, port)
for the socket to bind as a source address before making the connection.
An host of '' or port 0 tells the OS to use the default.
"""
host, port = address
if host.startswith("["):
host = host.strip("[]")
err = None
# Using the value from allowed_gai_family() in the context of getaddrinfo lets
# us select whether to work with IPv4 DNS records, IPv6 records, or both.
# The original create_connection function always returns all records.
family = allowed_gai_family()
try:
host.encode("idna")
except UnicodeError:
raise LocationParseError(f"'{host}', label empty or too long") from None
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
try:
sock = socket.socket(af, socktype, proto)
# If provided, set socket level options before connecting.
_set_socket_options(sock, socket_options)
if timeout is not _DEFAULT_TIMEOUT:
sock.settimeout(timeout)
if source_address:
sock.bind(source_address)
> sock.connect(sa)
E ConnectionRefusedError: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError
The above exception was the direct cause of the following exception:
self =
method = 'GET', url = '/', body = None
headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}
retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
redirect = False, assert_same_host = False
timeout = Timeout(connect=0.1, read=None, total=None), pool_timeout = None
release_conn = False, chunked = False, body_pos = None, preload_content = False
decode_content = False, response_kw = {}
parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None)
destination_scheme = None, conn = None, release_this_conn = True
http_tunnel_required = False, err = None, clean_exit = False
def urlopen( # type: ignore[override]
self,
method: str,
url: str,
body: _TYPE_BODY | None = None,
headers: typing.Mapping[str, str] | None = None,
retries: Retry | bool | int | None = None,
redirect: bool = True,
assert_same_host: bool = True,
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
pool_timeout: int | None = None,
release_conn: bool | None = None,
chunked: bool = False,
body_pos: _TYPE_BODY_POSITION | None = None,
preload_content: bool = True,
decode_content: bool = True,
**response_kw: typing.Any,
) -> BaseHTTPResponse:
"""
Get a connection from the pool and perform an HTTP request. This is the
lowest level call for making a request, so you'll need to specify all
the raw details.
.. note::
More commonly, it's appropriate to use a convenience method
such as :meth:`request`.
.. note::
`release_conn` will only behave as expected if
`preload_content=False` because we want to make
`preload_content=False` the default behaviour someday soon without
breaking backwards compatibility.
:param method:
HTTP request method (such as GET, POST, PUT, etc.)
:param url:
The URL to perform the request on.
:param body:
Data to send in the request body, either :class:`str`, :class:`bytes`,
an iterable of :class:`str`/:class:`bytes`, or a file-like object.
:param headers:
Dictionary of custom headers to send, such as User-Agent,
If-None-Match, etc. If None, pool headers are used. If provided,
these headers completely replace any pool-specific headers.
:param retries:
Configure the number of retries to allow before raising a
:class:`~urllib3.exceptions.MaxRetryError` exception.
If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a
:class:`~urllib3.util.retry.Retry` object for fine-grained control
over different types of retries.
Pass an integer number to retry connection errors that many times,
but no other types of errors. Pass zero to never retry.
If ``False``, then retries are disabled and any exception is raised
immediately. Also, instead of raising a MaxRetryError on redirects,
the redirect response will be returned.
:type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
:param redirect:
If True, automatically handle redirects (status codes 301, 302,
303, 307, 308). Each redirect counts as a retry. Disabling retries
will disable redirect, too.
:param assert_same_host:
If ``True``, will make sure that the host of the pool requests is
consistent else will raise HostChangedError. When ``False``, you can
use the pool on an HTTP proxy and request foreign hosts.
:param timeout:
If specified, overrides the default timeout for this one
request. It may be a float (in seconds) or an instance of
:class:`urllib3.util.Timeout`.
:param pool_timeout:
If set and the pool is set to block=True, then this method will
block for ``pool_timeout`` seconds and raise EmptyPoolError if no
connection is available within the time period.
:param bool preload_content:
If True, the response's body will be preloaded into memory.
:param bool decode_content:
If True, will attempt to decode the body based on the
'content-encoding' header.
:param release_conn:
If False, then the urlopen call will not release the connection
back into the pool once a response is received (but will release if
you read the entire contents of the response such as when
`preload_content=True`). This is useful if you're not preloading
the response's content immediately. You will need to call
``r.release_conn()`` on the response ``r`` to return the connection
back into the pool. If None, it takes the value of ``preload_content``
which defaults to ``True``.
:param bool chunked:
If True, urllib3 will send the body using chunked transfer
encoding. Otherwise, urllib3 will send the body using the standard
content-length form. Defaults to False.
:param int body_pos:
Position to seek to in file-like body in the event of a retry or
redirect. Typically this won't need to be set because urllib3 will
auto-populate the value when needed.
"""
parsed_url = parse_url(url)
destination_scheme = parsed_url.scheme
if headers is None:
headers = self.headers
if not isinstance(retries, Retry):
retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
if release_conn is None:
release_conn = preload_content
# Check host
if assert_same_host and not self.is_same_host(url):
raise HostChangedError(self, url, retries)
# Ensure that the URL we're connecting to is properly encoded
if url.startswith("/"):
url = to_str(_encode_target(url))
else:
url = to_str(parsed_url.url)
conn = None
# Track whether `conn` needs to be released before
# returning/raising/recursing. Update this variable if necessary, and
# leave `release_conn` constant throughout the function. That way, if
# the function recurses, the original value of `release_conn` will be
# passed down into the recursive call, and its value will be respected.
#
# See issue #651 [1] for details.
#
# [1]
release_this_conn = release_conn
http_tunnel_required = connection_requires_http_tunnel(
self.proxy, self.proxy_config, destination_scheme
)
# Merge the proxy headers. Only done when not using HTTP CONNECT. We
# have to copy the headers dict so we can safely change it without those
# changes being reflected in anyone else's copy.
if not http_tunnel_required:
headers = headers.copy() # type: ignore[attr-defined]
headers.update(self.proxy_headers) # type: ignore[union-attr]
# Must keep the exception bound to a separate variable or else Python 3
# complains about UnboundLocalError.
err = None
# Keep track of whether we cleanly exited the except block. This
# ensures we do proper cleanup in finally.
clean_exit = False
# Rewind body position, if needed. Record current position
# for future rewinds in the event of a redirect/retry.
body_pos = set_file_position(body, body_pos)
try:
# Request a connection from the queue.
timeout_obj = self._get_timeout(timeout)
conn = self._get_conn(timeout=pool_timeout)
conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment]
# Is this a closed/new connection that requires CONNECT tunnelling?
if self.proxy is not None and http_tunnel_required and conn.is_closed:
try:
self._prepare_proxy(conn)
except (BaseSSLError, OSError, SocketTimeout) as e:
self._raise_timeout(
err=e, url=self.proxy.url, timeout_value=conn.timeout
)
raise
# If we're going to release the connection in ``finally:``, then
# the response doesn't need to know about the connection. Otherwise
# it will also try to release it and we'll have a double-release
# mess.
response_conn = conn if not release_conn else None
# Make the request on the HTTPConnection object
> response = self._make_request(
conn,
method,
url,
timeout=timeout_obj,
body=body,
headers=headers,
chunked=chunked,
retries=retries,
response_conn=response_conn,
preload_content=preload_content,
decode_content=decode_content,
**response_kw,
)
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request
conn.request(
/usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request
self.endheaders()
/usr/lib/python3.13/http/client.py:1333: in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
/usr/lib/python3.13/http/client.py:1093: in _send_output
self.send(msg)
/usr/lib/python3.13/http/client.py:1037: in send
self.connect()
/usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect
self.sock = self._new_conn()
^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
except socket.gaierror as e:
raise NameResolutionError(self.host, self, e) from e
except SocketTimeout as e:
raise ConnectTimeoutError(
self,
f"Connection to {self.host} timed out. (connect timeout={self.timeout})",
) from e
except OSError as e:
> raise NewConnectionError(
self, f"Failed to establish a new connection: {e}"
) from e
E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError
The above exception was the direct cause of the following exception:
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=None, total=None), verify = True
cert = None, proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
> resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
src/requests/adapters.py:644:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen
retries = retries.increment(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
method = 'GET', url = '/', response = None
error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')
_pool =
_stacktrace =
def increment(
self,
method: str | None = None,
url: str | None = None,
response: BaseHTTPResponse | None = None,
error: Exception | None = None,
_pool: ConnectionPool | None = None,
_stacktrace: TracebackType | None = None,
) -> Self:
"""Return a new Retry object with incremented retry counters.
:param response: A response object, or None, if the server did not
return a response.
:type response: :class:`~urllib3.response.BaseHTTPResponse`
:param Exception error: An error encountered during the request, or
None if the response was received successfully.
:return: A new ``Retry`` object.
"""
if self.total is False and error:
# Disabled, indicate to re-raise the error.
raise reraise(type(error), error, _stacktrace)
total = self.total
if total is not None:
total -= 1
connect = self.connect
read = self.read
redirect = self.redirect
status_count = self.status
other = self.other
cause = "unknown"
status = None
redirect_location = None
if error and self._is_connection_error(error):
# Connect retry?
if connect is False:
raise reraise(type(error), error, _stacktrace)
elif connect is not None:
connect -= 1
elif error and self._is_read_error(error):
# Read retry?
if read is False or method is None or not self._is_method_retryable(method):
raise reraise(type(error), error, _stacktrace)
elif read is not None:
read -= 1
elif error:
# Other retry?
if other is not None:
other -= 1
elif response and response.get_redirect_location():
# Redirect retry?
if redirect is not None:
redirect -= 1
cause = "too many redirects"
response_redirect_location = response.get_redirect_location()
if response_redirect_location:
redirect_location = response_redirect_location
status = response.status
else:
# Incrementing because of a server error like a 500 in
# status_forcelist and the given method is in the allowed_methods
cause = ResponseError.GENERIC_ERROR
if response and response.status:
if status_count is not None:
status_count -= 1
cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)
status = response.status
history = self.history + (
RequestHistory(method, url, error, status, redirect_location),
)
new_retry = self.new(
total=total,
connect=connect,
read=read,
redirect=redirect,
status=status_count,
other=other,
history=history,
)
if new_retry.is_exhausted():
reason = error or ResponseError(cause)
> raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
/usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError
During handling of the above exception, another exception occurred:
self =
timeout = Timeout(connect=0.1, read=None, total=None)
@pytest.mark.parametrize(
"timeout", ((0.1, None), Urllib3Timeout(connect=0.1, read=None))
)
def test_connect_timeout(self, timeout):
try:
> requests.get(TARPIT, timeout=timeout)
tests/test_requests.py:2530:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/requests/api.py:73: in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/api.py:59: in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:589: in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:703: in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=None, total=None), verify = True
cert = None, proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
except (ProtocolError, OSError) as err:
raise ConnectionError(err, request=request)
except MaxRetryError as e:
if isinstance(e.reason, ConnectTimeoutError):
# TODO: Remove this in 3.0.0: see #2811
if not isinstance(e.reason, NewConnectionError):
raise ConnectTimeout(e, request=request)
if isinstance(e.reason, ResponseError):
raise RetryError(e, request=request)
if isinstance(e.reason, _ProxyError):
raise ProxyError(e, request=request)
if isinstance(e.reason, _SSLError):
# This branch is for urllib3 v1.22 and later.
raise SSLError(e, request=request)
> raise ConnectionError(e, request=request)
E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
src/requests/adapters.py:677: ConnectionError
_______________ TestTimeout.test_total_timeout_connect[timeout0] _______________
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
> sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
/usr/lib/python3.13/site-packages/urllib3/connection.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection
raise err
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
address = ('10.255.255.1', 80), timeout = 0.1, source_address = None
socket_options = [(6, 1, 1)]
def create_connection(
address: tuple[str, int],
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
source_address: tuple[str, int] | None = None,
socket_options: _TYPE_SOCKET_OPTIONS | None = None,
) -> socket.socket:
"""Connect to *address* and return the socket object.
Convenience function. Connect to *address* (a 2-tuple ``(host,
port)``) and return the socket object. Passing the optional
*timeout* parameter will set the timeout on the socket instance
before attempting to connect. If no *timeout* is supplied, the
global default timeout setting returned by :func:`socket.getdefaulttimeout`
is used. If *source_address* is set it must be a tuple of (host, port)
for the socket to bind as a source address before making the connection.
An host of '' or port 0 tells the OS to use the default.
"""
host, port = address
if host.startswith("["):
host = host.strip("[]")
err = None
# Using the value from allowed_gai_family() in the context of getaddrinfo lets
# us select whether to work with IPv4 DNS records, IPv6 records, or both.
# The original create_connection function always returns all records.
family = allowed_gai_family()
try:
host.encode("idna")
except UnicodeError:
raise LocationParseError(f"'{host}', label empty or too long") from None
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
try:
sock = socket.socket(af, socktype, proto)
# If provided, set socket level options before connecting.
_set_socket_options(sock, socket_options)
if timeout is not _DEFAULT_TIMEOUT:
sock.settimeout(timeout)
if source_address:
sock.bind(source_address)
> sock.connect(sa)
E ConnectionRefusedError: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError
The above exception was the direct cause of the following exception:
self =
method = 'GET', url = '/', body = None
headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}
retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
redirect = False, assert_same_host = False
timeout = Timeout(connect=0.1, read=0.1, total=None), pool_timeout = None
release_conn = False, chunked = False, body_pos = None, preload_content = False
decode_content = False, response_kw = {}
parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None)
destination_scheme = None, conn = None, release_this_conn = True
http_tunnel_required = False, err = None, clean_exit = False
def urlopen( # type: ignore[override]
self,
method: str,
url: str,
body: _TYPE_BODY | None = None,
headers: typing.Mapping[str, str] | None = None,
retries: Retry | bool | int | None = None,
redirect: bool = True,
assert_same_host: bool = True,
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
pool_timeout: int | None = None,
release_conn: bool | None = None,
chunked: bool = False,
body_pos: _TYPE_BODY_POSITION | None = None,
preload_content: bool = True,
decode_content: bool = True,
**response_kw: typing.Any,
) -> BaseHTTPResponse:
"""
Get a connection from the pool and perform an HTTP request. This is the
lowest level call for making a request, so you'll need to specify all
the raw details.
.. note::
More commonly, it's appropriate to use a convenience method
such as :meth:`request`.
.. note::
`release_conn` will only behave as expected if
`preload_content=False` because we want to make
`preload_content=False` the default behaviour someday soon without
breaking backwards compatibility.
:param method:
HTTP request method (such as GET, POST, PUT, etc.)
:param url:
The URL to perform the request on.
:param body:
Data to send in the request body, either :class:`str`, :class:`bytes`,
an iterable of :class:`str`/:class:`bytes`, or a file-like object.
:param headers:
Dictionary of custom headers to send, such as User-Agent,
If-None-Match, etc. If None, pool headers are used. If provided,
these headers completely replace any pool-specific headers.
:param retries:
Configure the number of retries to allow before raising a
:class:`~urllib3.exceptions.MaxRetryError` exception.
If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a
:class:`~urllib3.util.retry.Retry` object for fine-grained control
over different types of retries.
Pass an integer number to retry connection errors that many times,
but no other types of errors. Pass zero to never retry.
If ``False``, then retries are disabled and any exception is raised
immediately. Also, instead of raising a MaxRetryError on redirects,
the redirect response will be returned.
:type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
:param redirect:
If True, automatically handle redirects (status codes 301, 302,
303, 307, 308). Each redirect counts as a retry. Disabling retries
will disable redirect, too.
:param assert_same_host:
If ``True``, will make sure that the host of the pool requests is
consistent else will raise HostChangedError. When ``False``, you can
use the pool on an HTTP proxy and request foreign hosts.
:param timeout:
If specified, overrides the default timeout for this one
request. It may be a float (in seconds) or an instance of
:class:`urllib3.util.Timeout`.
:param pool_timeout:
If set and the pool is set to block=True, then this method will
block for ``pool_timeout`` seconds and raise EmptyPoolError if no
connection is available within the time period.
:param bool preload_content:
If True, the response's body will be preloaded into memory.
:param bool decode_content:
If True, will attempt to decode the body based on the
'content-encoding' header.
:param release_conn:
If False, then the urlopen call will not release the connection
back into the pool once a response is received (but will release if
you read the entire contents of the response such as when
`preload_content=True`). This is useful if you're not preloading
the response's content immediately. You will need to call
``r.release_conn()`` on the response ``r`` to return the connection
back into the pool. If None, it takes the value of ``preload_content``
which defaults to ``True``.
:param bool chunked:
If True, urllib3 will send the body using chunked transfer
encoding. Otherwise, urllib3 will send the body using the standard
content-length form. Defaults to False.
:param int body_pos:
Position to seek to in file-like body in the event of a retry or
redirect. Typically this won't need to be set because urllib3 will
auto-populate the value when needed.
"""
parsed_url = parse_url(url)
destination_scheme = parsed_url.scheme
if headers is None:
headers = self.headers
if not isinstance(retries, Retry):
retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
if release_conn is None:
release_conn = preload_content
# Check host
if assert_same_host and not self.is_same_host(url):
raise HostChangedError(self, url, retries)
# Ensure that the URL we're connecting to is properly encoded
if url.startswith("/"):
url = to_str(_encode_target(url))
else:
url = to_str(parsed_url.url)
conn = None
# Track whether `conn` needs to be released before
# returning/raising/recursing. Update this variable if necessary, and
# leave `release_conn` constant throughout the function. That way, if
# the function recurses, the original value of `release_conn` will be
# passed down into the recursive call, and its value will be respected.
#
# See issue #651 [1] for details.
#
# [1]
release_this_conn = release_conn
http_tunnel_required = connection_requires_http_tunnel(
self.proxy, self.proxy_config, destination_scheme
)
# Merge the proxy headers. Only done when not using HTTP CONNECT. We
# have to copy the headers dict so we can safely change it without those
# changes being reflected in anyone else's copy.
if not http_tunnel_required:
headers = headers.copy() # type: ignore[attr-defined]
headers.update(self.proxy_headers) # type: ignore[union-attr]
# Must keep the exception bound to a separate variable or else Python 3
# complains about UnboundLocalError.
err = None
# Keep track of whether we cleanly exited the except block. This
# ensures we do proper cleanup in finally.
clean_exit = False
# Rewind body position, if needed. Record current position
# for future rewinds in the event of a redirect/retry.
body_pos = set_file_position(body, body_pos)
try:
# Request a connection from the queue.
timeout_obj = self._get_timeout(timeout)
conn = self._get_conn(timeout=pool_timeout)
conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment]
# Is this a closed/new connection that requires CONNECT tunnelling?
if self.proxy is not None and http_tunnel_required and conn.is_closed:
try:
self._prepare_proxy(conn)
except (BaseSSLError, OSError, SocketTimeout) as e:
self._raise_timeout(
err=e, url=self.proxy.url, timeout_value=conn.timeout
)
raise
# If we're going to release the connection in ``finally:``, then
# the response doesn't need to know about the connection. Otherwise
# it will also try to release it and we'll have a double-release
# mess.
response_conn = conn if not release_conn else None
# Make the request on the HTTPConnection object
> response = self._make_request(
conn,
method,
url,
timeout=timeout_obj,
body=body,
headers=headers,
chunked=chunked,
retries=retries,
response_conn=response_conn,
preload_content=preload_content,
decode_content=decode_content,
**response_kw,
)
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request
conn.request(
/usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request
self.endheaders()
/usr/lib/python3.13/http/client.py:1333: in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
/usr/lib/python3.13/http/client.py:1093: in _send_output
self.send(msg)
/usr/lib/python3.13/http/client.py:1037: in send
self.connect()
/usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect
self.sock = self._new_conn()
^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
except socket.gaierror as e:
raise NameResolutionError(self.host, self, e) from e
except SocketTimeout as e:
raise ConnectTimeoutError(
self,
f"Connection to {self.host} timed out. (connect timeout={self.timeout})",
) from e
except OSError as e:
> raise NewConnectionError(
self, f"Failed to establish a new connection: {e}"
) from e
E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError
The above exception was the direct cause of the following exception:
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None
proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
> resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
src/requests/adapters.py:644:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen
retries = retries.increment(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
method = 'GET', url = '/', response = None
error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')
_pool =
_stacktrace =
def increment(
self,
method: str | None = None,
url: str | None = None,
response: BaseHTTPResponse | None = None,
error: Exception | None = None,
_pool: ConnectionPool | None = None,
_stacktrace: TracebackType | None = None,
) -> Self:
"""Return a new Retry object with incremented retry counters.
:param response: A response object, or None, if the server did not
return a response.
:type response: :class:`~urllib3.response.BaseHTTPResponse`
:param Exception error: An error encountered during the request, or
None if the response was received successfully.
:return: A new ``Retry`` object.
"""
if self.total is False and error:
# Disabled, indicate to re-raise the error.
raise reraise(type(error), error, _stacktrace)
total = self.total
if total is not None:
total -= 1
connect = self.connect
read = self.read
redirect = self.redirect
status_count = self.status
other = self.other
cause = "unknown"
status = None
redirect_location = None
if error and self._is_connection_error(error):
# Connect retry?
if connect is False:
raise reraise(type(error), error, _stacktrace)
elif connect is not None:
connect -= 1
elif error and self._is_read_error(error):
# Read retry?
if read is False or method is None or not self._is_method_retryable(method):
raise reraise(type(error), error, _stacktrace)
elif read is not None:
read -= 1
elif error:
# Other retry?
if other is not None:
other -= 1
elif response and response.get_redirect_location():
# Redirect retry?
if redirect is not None:
redirect -= 1
cause = "too many redirects"
response_redirect_location = response.get_redirect_location()
if response_redirect_location:
redirect_location = response_redirect_location
status = response.status
else:
# Incrementing because of a server error like a 500 in
# status_forcelist and the given method is in the allowed_methods
cause = ResponseError.GENERIC_ERROR
if response and response.status:
if status_count is not None:
status_count -= 1
cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)
status = response.status
history = self.history + (
RequestHistory(method, url, error, status, redirect_location),
)
new_retry = self.new(
total=total,
connect=connect,
read=read,
redirect=redirect,
status=status_count,
other=other,
history=history,
)
if new_retry.is_exhausted():
reason = error or ResponseError(cause)
> raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
/usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError
During handling of the above exception, another exception occurred:
self =
timeout = (0.1, 0.1)
@pytest.mark.parametrize(
"timeout", ((0.1, 0.1), Urllib3Timeout(connect=0.1, read=0.1))
)
def test_total_timeout_connect(self, timeout):
try:
> requests.get(TARPIT, timeout=timeout)
tests/test_requests.py:2541:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/requests/api.py:73: in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/api.py:59: in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:589: in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:703: in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None
proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
except (ProtocolError, OSError) as err:
raise ConnectionError(err, request=request)
except MaxRetryError as e:
if isinstance(e.reason, ConnectTimeoutError):
# TODO: Remove this in 3.0.0: see #2811
if not isinstance(e.reason, NewConnectionError):
raise ConnectTimeout(e, request=request)
if isinstance(e.reason, ResponseError):
raise RetryError(e, request=request)
if isinstance(e.reason, _ProxyError):
raise ProxyError(e, request=request)
if isinstance(e.reason, _SSLError):
# This branch is for urllib3 v1.22 and later.
raise SSLError(e, request=request)
> raise ConnectionError(e, request=request)
E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
src/requests/adapters.py:677: ConnectionError
_______________ TestTimeout.test_total_timeout_connect[timeout1] _______________
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
> sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
/usr/lib/python3.13/site-packages/urllib3/connection.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:85: in create_connection
raise err
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
address = ('10.255.255.1', 80), timeout = 0.1, source_address = None
socket_options = [(6, 1, 1)]
def create_connection(
address: tuple[str, int],
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
source_address: tuple[str, int] | None = None,
socket_options: _TYPE_SOCKET_OPTIONS | None = None,
) -> socket.socket:
"""Connect to *address* and return the socket object.
Convenience function. Connect to *address* (a 2-tuple ``(host,
port)``) and return the socket object. Passing the optional
*timeout* parameter will set the timeout on the socket instance
before attempting to connect. If no *timeout* is supplied, the
global default timeout setting returned by :func:`socket.getdefaulttimeout`
is used. If *source_address* is set it must be a tuple of (host, port)
for the socket to bind as a source address before making the connection.
An host of '' or port 0 tells the OS to use the default.
"""
host, port = address
if host.startswith("["):
host = host.strip("[]")
err = None
# Using the value from allowed_gai_family() in the context of getaddrinfo lets
# us select whether to work with IPv4 DNS records, IPv6 records, or both.
# The original create_connection function always returns all records.
family = allowed_gai_family()
try:
host.encode("idna")
except UnicodeError:
raise LocationParseError(f"'{host}', label empty or too long") from None
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
try:
sock = socket.socket(af, socktype, proto)
# If provided, set socket level options before connecting.
_set_socket_options(sock, socket_options)
if timeout is not _DEFAULT_TIMEOUT:
sock.settimeout(timeout)
if source_address:
sock.bind(source_address)
> sock.connect(sa)
E ConnectionRefusedError: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError
The above exception was the direct cause of the following exception:
self =
method = 'GET', url = '/', body = None
headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}
retries = Retry(total=0, connect=None, read=False, redirect=None, status=None)
redirect = False, assert_same_host = False
timeout = Timeout(connect=0.1, read=0.1, total=None), pool_timeout = None
release_conn = False, chunked = False, body_pos = None, preload_content = False
decode_content = False, response_kw = {}
parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None)
destination_scheme = None, conn = None, release_this_conn = True
http_tunnel_required = False, err = None, clean_exit = False
def urlopen( # type: ignore[override]
self,
method: str,
url: str,
body: _TYPE_BODY | None = None,
headers: typing.Mapping[str, str] | None = None,
retries: Retry | bool | int | None = None,
redirect: bool = True,
assert_same_host: bool = True,
timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT,
pool_timeout: int | None = None,
release_conn: bool | None = None,
chunked: bool = False,
body_pos: _TYPE_BODY_POSITION | None = None,
preload_content: bool = True,
decode_content: bool = True,
**response_kw: typing.Any,
) -> BaseHTTPResponse:
"""
Get a connection from the pool and perform an HTTP request. This is the
lowest level call for making a request, so you'll need to specify all
the raw details.
.. note::
More commonly, it's appropriate to use a convenience method
such as :meth:`request`.
.. note::
`release_conn` will only behave as expected if
`preload_content=False` because we want to make
`preload_content=False` the default behaviour someday soon without
breaking backwards compatibility.
:param method:
HTTP request method (such as GET, POST, PUT, etc.)
:param url:
The URL to perform the request on.
:param body:
Data to send in the request body, either :class:`str`, :class:`bytes`,
an iterable of :class:`str`/:class:`bytes`, or a file-like object.
:param headers:
Dictionary of custom headers to send, such as User-Agent,
If-None-Match, etc. If None, pool headers are used. If provided,
these headers completely replace any pool-specific headers.
:param retries:
Configure the number of retries to allow before raising a
:class:`~urllib3.exceptions.MaxRetryError` exception.
If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a
:class:`~urllib3.util.retry.Retry` object for fine-grained control
over different types of retries.
Pass an integer number to retry connection errors that many times,
but no other types of errors. Pass zero to never retry.
If ``False``, then retries are disabled and any exception is raised
immediately. Also, instead of raising a MaxRetryError on redirects,
the redirect response will be returned.
:type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
:param redirect:
If True, automatically handle redirects (status codes 301, 302,
303, 307, 308). Each redirect counts as a retry. Disabling retries
will disable redirect, too.
:param assert_same_host:
If ``True``, will make sure that the host of the pool requests is
consistent else will raise HostChangedError. When ``False``, you can
use the pool on an HTTP proxy and request foreign hosts.
:param timeout:
If specified, overrides the default timeout for this one
request. It may be a float (in seconds) or an instance of
:class:`urllib3.util.Timeout`.
:param pool_timeout:
If set and the pool is set to block=True, then this method will
block for ``pool_timeout`` seconds and raise EmptyPoolError if no
connection is available within the time period.
:param bool preload_content:
If True, the response's body will be preloaded into memory.
:param bool decode_content:
If True, will attempt to decode the body based on the
'content-encoding' header.
:param release_conn:
If False, then the urlopen call will not release the connection
back into the pool once a response is received (but will release if
you read the entire contents of the response such as when
`preload_content=True`). This is useful if you're not preloading
the response's content immediately. You will need to call
``r.release_conn()`` on the response ``r`` to return the connection
back into the pool. If None, it takes the value of ``preload_content``
which defaults to ``True``.
:param bool chunked:
If True, urllib3 will send the body using chunked transfer
encoding. Otherwise, urllib3 will send the body using the standard
content-length form. Defaults to False.
:param int body_pos:
Position to seek to in file-like body in the event of a retry or
redirect. Typically this won't need to be set because urllib3 will
auto-populate the value when needed.
"""
parsed_url = parse_url(url)
destination_scheme = parsed_url.scheme
if headers is None:
headers = self.headers
if not isinstance(retries, Retry):
retries = Retry.from_int(retries, redirect=redirect, default=self.retries)
if release_conn is None:
release_conn = preload_content
# Check host
if assert_same_host and not self.is_same_host(url):
raise HostChangedError(self, url, retries)
# Ensure that the URL we're connecting to is properly encoded
if url.startswith("/"):
url = to_str(_encode_target(url))
else:
url = to_str(parsed_url.url)
conn = None
# Track whether `conn` needs to be released before
# returning/raising/recursing. Update this variable if necessary, and
# leave `release_conn` constant throughout the function. That way, if
# the function recurses, the original value of `release_conn` will be
# passed down into the recursive call, and its value will be respected.
#
# See issue #651 [1] for details.
#
# [1]
release_this_conn = release_conn
http_tunnel_required = connection_requires_http_tunnel(
self.proxy, self.proxy_config, destination_scheme
)
# Merge the proxy headers. Only done when not using HTTP CONNECT. We
# have to copy the headers dict so we can safely change it without those
# changes being reflected in anyone else's copy.
if not http_tunnel_required:
headers = headers.copy() # type: ignore[attr-defined]
headers.update(self.proxy_headers) # type: ignore[union-attr]
# Must keep the exception bound to a separate variable or else Python 3
# complains about UnboundLocalError.
err = None
# Keep track of whether we cleanly exited the except block. This
# ensures we do proper cleanup in finally.
clean_exit = False
# Rewind body position, if needed. Record current position
# for future rewinds in the event of a redirect/retry.
body_pos = set_file_position(body, body_pos)
try:
# Request a connection from the queue.
timeout_obj = self._get_timeout(timeout)
conn = self._get_conn(timeout=pool_timeout)
conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment]
# Is this a closed/new connection that requires CONNECT tunnelling?
if self.proxy is not None and http_tunnel_required and conn.is_closed:
try:
self._prepare_proxy(conn)
except (BaseSSLError, OSError, SocketTimeout) as e:
self._raise_timeout(
err=e, url=self.proxy.url, timeout_value=conn.timeout
)
raise
# If we're going to release the connection in ``finally:``, then
# the response doesn't need to know about the connection. Otherwise
# it will also try to release it and we'll have a double-release
# mess.
response_conn = conn if not release_conn else None
# Make the request on the HTTPConnection object
> response = self._make_request(
conn,
method,
url,
timeout=timeout_obj,
body=body,
headers=headers,
chunked=chunked,
retries=retries,
response_conn=response_conn,
preload_content=preload_content,
decode_content=decode_content,
**response_kw,
)
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:787:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:493: in _make_request
conn.request(
/usr/lib/python3.13/site-packages/urllib3/connection.py:494: in request
self.endheaders()
/usr/lib/python3.13/http/client.py:1333: in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
/usr/lib/python3.13/http/client.py:1093: in _send_output
self.send(msg)
/usr/lib/python3.13/http/client.py:1037: in send
self.connect()
/usr/lib/python3.13/site-packages/urllib3/connection.py:325: in connect
self.sock = self._new_conn()
^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _new_conn(self) -> socket.socket:
"""Establish a socket connection and set nodelay settings on it.
:return: New socket connection.
"""
try:
sock = connection.create_connection(
(self._dns_host, self.port),
self.timeout,
source_address=self.source_address,
socket_options=self.socket_options,
)
except socket.gaierror as e:
raise NameResolutionError(self.host, self, e) from e
except SocketTimeout as e:
raise ConnectTimeoutError(
self,
f"Connection to {self.host} timed out. (connect timeout={self.timeout})",
) from e
except OSError as e:
> raise NewConnectionError(
self, f"Failed to establish a new connection: {e}"
) from e
E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused
/usr/lib/python3.13/site-packages/urllib3/connection.py:213: NewConnectionError
The above exception was the direct cause of the following exception:
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None
proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
> resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
src/requests/adapters.py:644:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:841: in urlopen
retries = retries.increment(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Retry(total=0, connect=None, read=False, redirect=None, status=None)
method = 'GET', url = '/', response = None
error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')
_pool =
_stacktrace =
def increment(
self,
method: str | None = None,
url: str | None = None,
response: BaseHTTPResponse | None = None,
error: Exception | None = None,
_pool: ConnectionPool | None = None,
_stacktrace: TracebackType | None = None,
) -> Self:
"""Return a new Retry object with incremented retry counters.
:param response: A response object, or None, if the server did not
return a response.
:type response: :class:`~urllib3.response.BaseHTTPResponse`
:param Exception error: An error encountered during the request, or
None if the response was received successfully.
:return: A new ``Retry`` object.
"""
if self.total is False and error:
# Disabled, indicate to re-raise the error.
raise reraise(type(error), error, _stacktrace)
total = self.total
if total is not None:
total -= 1
connect = self.connect
read = self.read
redirect = self.redirect
status_count = self.status
other = self.other
cause = "unknown"
status = None
redirect_location = None
if error and self._is_connection_error(error):
# Connect retry?
if connect is False:
raise reraise(type(error), error, _stacktrace)
elif connect is not None:
connect -= 1
elif error and self._is_read_error(error):
# Read retry?
if read is False or method is None or not self._is_method_retryable(method):
raise reraise(type(error), error, _stacktrace)
elif read is not None:
read -= 1
elif error:
# Other retry?
if other is not None:
other -= 1
elif response and response.get_redirect_location():
# Redirect retry?
if redirect is not None:
redirect -= 1
cause = "too many redirects"
response_redirect_location = response.get_redirect_location()
if response_redirect_location:
redirect_location = response_redirect_location
status = response.status
else:
# Incrementing because of a server error like a 500 in
# status_forcelist and the given method is in the allowed_methods
cause = ResponseError.GENERIC_ERROR
if response and response.status:
if status_count is not None:
status_count -= 1
cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)
status = response.status
history = self.history + (
RequestHistory(method, url, error, status, redirect_location),
)
new_retry = self.new(
total=total,
connect=connect,
read=read,
redirect=redirect,
status=status_count,
other=other,
history=history,
)
if new_retry.is_exhausted():
reason = error or ResponseError(cause)
> raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
/usr/lib/python3.13/site-packages/urllib3/util/retry.py:519: MaxRetryError
During handling of the above exception, another exception occurred:
self =
timeout = Timeout(connect=0.1, read=0.1, total=None)
@pytest.mark.parametrize(
"timeout", ((0.1, 0.1), Urllib3Timeout(connect=0.1, read=0.1))
)
def test_total_timeout_connect(self, timeout):
try:
> requests.get(TARPIT, timeout=timeout)
tests/test_requests.py:2541:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src/requests/api.py:73: in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/api.py:59: in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:589: in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/requests/sessions.py:703: in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
request = , stream = False
timeout = Timeout(connect=0.1, read=0.1, total=None), verify = True, cert = None
proxies = OrderedDict()
def send(
self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None
):
"""Sends PreparedRequest object. Returns Response object.
:param request: The :class:`PreparedRequest ` being sent.
:param stream: (optional) Whether to stream the request content.
:param timeout: (optional) How long to wait for the server to send
data before giving up, as a float, or a :ref:`(connect timeout,
read timeout) ` tuple.
:type timeout: float or tuple or urllib3 Timeout object
:param verify: (optional) Either a boolean, in which case it controls whether
we verify the server's TLS certificate, or a string, in which case it
must be a path to a CA bundle to use
:param cert: (optional) Any user-provided SSL certificate to be trusted.
:param proxies: (optional) The proxies dictionary to apply to the request.
:rtype: requests.Response
"""
try:
conn = self.get_connection_with_tls_context(
request, verify, proxies=proxies, cert=cert
)
except LocationValueError as e:
raise InvalidURL(e, request=request)
self.cert_verify(conn, request.url, verify, cert)
url = self.request_url(request, proxies)
self.add_headers(
request,
stream=stream,
timeout=timeout,
verify=verify,
cert=cert,
proxies=proxies,
)
chunked = not (request.body is None or "Content-Length" in request.headers)
if isinstance(timeout, tuple):
try:
connect, read = timeout
timeout = TimeoutSauce(connect=connect, read=read)
except ValueError:
raise ValueError(
f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
f"or a single float to set both timeouts to the same value."
)
elif isinstance(timeout, TimeoutSauce):
pass
else:
timeout = TimeoutSauce(connect=timeout, read=timeout)
try:
resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)
except (ProtocolError, OSError) as err:
raise ConnectionError(err, request=request)
except MaxRetryError as e:
if isinstance(e.reason, ConnectTimeoutError):
# TODO: Remove this in 3.0.0: see #2811
if not isinstance(e.reason, NewConnectionError):
raise ConnectTimeout(e, request=request)
if isinstance(e.reason, ResponseError):
raise RetryError(e, request=request)
if isinstance(e.reason, _ProxyError):
raise ProxyError(e, request=request)
if isinstance(e.reason, _SSLError):
# This branch is for urllib3 v1.22 and later.
raise SSLError(e, request=request)
> raise ConnectionError(e, request=request)
E requests.exceptions.ConnectionError: HTTPConnectionPool(host='10.255.255.1', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
src/requests/adapters.py:677: ConnectionError
=============================== warnings summary ===============================
tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
/build/python-requests/src/requests/src/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (42) to a string or bytes object in the near future to avoid problems.
warnings.warn(
tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
tests/test_requests.py::TestRequests::test_set_basicauth[42-42]
/build/python-requests/src/requests/src/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in () to a string or bytes object in the near future to avoid problems.
warnings.warn(
tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
/build/python-requests/src/requests/src/requests/auth.py:36: DeprecationWarning: Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (None) to a string or bytes object in the near future to avoid problems.
warnings.warn(
tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
tests/test_requests.py::TestRequests::test_set_basicauth[None-None]
/build/python-requests/src/requests/src/requests/auth.py:46: DeprecationWarning: Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in () to a string or bytes object in the near future to avoid problems.
warnings.warn(
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_True
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert
tests/test_requests.py::TestPreparingURLs::test_different_connection_pool_for_mtls_settings
/usr/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
warnings.warn(
tests/test_utils.py::TestContentEncodingDetection::test_none
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[]
tests/test_utils.py::TestContentEncodingDetection::test_pragmas[]
tests/test_utils.py::TestContentEncodingDetection::test_precedence
/build/python-requests/src/requests/src/requests/utils.py:484: DeprecationWarning: In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)
warnings.warn(
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_requests.py::TestTimeout::test_connect_timeout[timeout0] - ...
FAILED tests/test_requests.py::TestTimeout::test_connect_timeout[timeout1] - ...
FAILED tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout0]
FAILED tests/test_requests.py::TestTimeout::test_total_timeout_connect[timeout1]
= 4 failed, 590 passed, 15 skipped, 1 deselected, 1 xfailed, 18 warnings in 87.34s (0:01:27) =
[1m[31m==> ERROR:[m[1m A failure occurred in check().[m
[1m Aborting...[m
[0m[J[23;2t[1m[31m==> ERROR:[m[1m Build failed, check /var/lib/archbuild/extra-riscv64/felix-3/build[m
[34h[?25h[34h[?25h[34h[?25hreceiving incremental file list
python-requests-2.32.5-1-riscv64-build.log
python-requests-2.32.5-1-riscv64-check.log
python-requests-2.32.5-1-riscv64-prepare.log
sent 81 bytes received 18,946 bytes 38,054.00 bytes/sec
total size is 186,176 speedup is 9.78