Как передать URL содержит? , /, & внутри колбы веб-сервис метод

1

Привет, я пытаюсь передать URL-адрес внутри метода Flask,

My url: https://example.org/de?=fg&hi=jk

Я попробовал следующие шаги:

@app.route('/flip/<path:url>')
def flip(url):
    return "retrievved url:"+str(url)

calling the url : localhost:8200//flip/https://example.org/de?=fg&hi=jk 
returns : 'https://example.org/de'

and another method,

@app.route('/flip')
def flip(url):
    url=request.args.get('url')
    return "retrievved url:"+str(url)


calling the url: localhost:8200//flip?url=https://example.org/de?=fg&hi=jk  
returns : 'https://example.org/de?=fg'

Мой ожидаемый результат должен вернуть весь URL-адрес, который мы передаем https://example.org/de?=fg&hi=jk

Пожалуйста, помогите, спасибо заранее

Теги:
flask
web-services
request

1 ответ

4

Это не имеет никакого отношения к Flask. Ваши URL-адреса не означают, что вы думаете о них.

Например, этот URL:

localhost:8200//flip?url=https://example.org/de?=fg&hi=jk 

... имеет два параметра запроса:

url=https://example.org/de?=fg
hi=jk

Параметр & отделяет параметры запроса от внешнего запроса, поэтому он имеет отдельные параметры url и hi.

Кроме того, незаконно использовать многие из этих символов в параметре запроса, но вы часто избегаете его.


Вот почему веб-сайты, которые должны внедрять URL-адреса внутри других URL-адресов, используют процентную кодировку. Ваша страница должна быть отправлена:

localhost:8200//flip?url=https%3A//example.org/de%3F%3Dfg%26hi%3Djk

Теперь есть только один параметр запроса:

url=https%3A//example.org/de%3F%3Dfg%26hi%3Djk

И затем, когда вы разбираете строку запроса, вы получаете:

url=https://example.org/de?=fg&hi=jk 

Если вы действительно не можете исправить ситуацию на стороне клиента, вы можете выполнить итерацию всех параметров запроса и попытаться собрать их в один параметр url.

Или вы можете получить весь URL-адрес (request.url вместо request.args) и вручную выполнить его вручную, вместо того, чтобы позволить Flask или Python сделать это за вас.

Но в любом случае, это действительно взломанно, и вы не должны его рассматривать, если это абсолютно необходимо.

Кроме того, ваш URL-адрес является незаконным, и вы не хотите полагаться на "вы часто избегаете его". Если не приемлемо, что, скажем, некоторые пользователи не смогут подключиться, потому что их прокси-сервер закручивает URL-адреса, и вы провели все выходные, ударяя головой по столу, пытаясь отладить его, а затем он работает для некоторых из них, но немногие теперь получают неправильные страницы, а затем новая версия Chrome внезапно ломает что-то другое, и...

HTTP достаточно сложный и достаточно грязный, когда вы придерживаетесь стандартов, тем более, что ваш каркас делает большую часть тяжелой работы для вас.

  • 0
    Спасибо за ответ, есть ли способ получить вывод для моего URL, если рассматривать URL как строку или каким-либо другим способом?
  • 0
    @pyd Да, вы можете получить весь URL в виде строки. Но тогда вам придется анализировать его вручную, потому что, если вы попытаетесь передать его любому стандартному анализатору, он вернет вам ту же проблему, с которой вы начали.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню