私は多くの検索と実験を行ってきましたが、解決策を見つけることができませんでした. だから、私が見逃した些細なことがあれば、事前にお詫びします.
問題:
URLリソースをダウンロードしているPythonターボギアアプリがあります。クライアントからダウンロードするための URL が与えられています。
特に 1 つのクライアントは、エスケープされていない URL を送信します。たとえば、「http://www.foo.com/file with space.txt」
ダウンロードしようとすると、サーバーがこの URL を認識しないため、ダウンロードに失敗します。有効な URL にするには、スペースをエスケープする必要があります。
文字列をエンコードするメソッド (urllib.urlencode/urllib.quote など) があることは知っています。ただし、作業する文字列は URL ではないと想定しています。これらのメソッドに URL を指定すると、URL のスキームがエスケープされ、さらに無効になります。
つまり、要約は次のとおりです。Pythonで完全修飾URL全体をエスケープ解除するにはどうすればよいですか?
注: urlparse を使用して URL コンポーネントを解析し、パスを取得しようとしました。ただし、URL にクエリ パラメータやフラグメントなどがある場合もあります。そのため、URL を部分に分割し、パス + クエリ + フラグメントからのみ必要なものをエスケープし、URL を再構築するコードを記述したくありません。
URLを直接取得してエスケープするヘルパー関数はありますか?
また、クライアントから有効なエスケープ URL を取得する場合があることに注意してください。ですから、二重にエスケープすることなく、それらも処理したいと思います。