Часть пути в кавычках, но не параметры - PullRequest
0 голосов
/ 22 января 2020

У меня есть URL-адрес следующей формы https://website.com/chill & relax/folder/file.txt?a=1&b=2 (ссылка является фиктивным примером, она не предназначена для работы)

Когда я вставляю этот URL-адрес в Firefox, я могу получить требуемый file.txt, но когда я пытаюсь получить файл, используя python и запросы, он не работает:

>>> import requests
>>> url = "https://website.com/chill & relax/folder/file.txt?a=1&b=2"
>>> requests.get(url)

Traceback (most recent call last):
[...]
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x00982B70>: 
Failed to establish a new connection: [WinError 10060] [...]

Почему Firefox может запрашивать файл, но не requests? Как я могу заменить пробелы и знаки «&» только в части пути моего URL?

РЕДАКТИРОВАТЬ: теперь я считаю, что запросы могут фактически выполнять запросы с URL-адресами, которые содержат пробелы. Я думаю, что эта проблема связана с моим прокси, Firefox может работать с моим прокси, но команды запросов, выполняемые в PyCharm, останавливаются моим прокси.

Ответы [ 2 ]

1 голос
/ 22 января 2020

Для кодирования пути вы можете использовать это:

from requests.utils import requote_uri
url = requote_uri("https://website.com/chill & relax/folder/file.txt?a=1&b=2")

Но ссылка в любом случае не работает для меня даже в браузере. Действительно ли ссылка действительна?

0 голосов
/ 22 января 2020

Просто URL закодируйте ваш путь и добавьте параметры.

import urllib.parse
url = urllib.parse.quote("https://website.com/chill & relax/folder/file.txt")
url += "?a=1&b=2"
r = requests.get(url)
...