Как передать URL в качестве параметра REST GET в FLASK - PullRequest
0 голосов
/ 14 февраля 2020

Так что это мой код.

from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
app.config['DEBUG'] = True
api = Api(app)

# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app


class Default(Resource):
   def get(self, name):
    """Renders a sample page."""
    return "Hello " + name

class LiveStats(Resource):
  def get(self, url):
    return "Trying to get " + url

    # data = request.get(url)
    # return data

api.add_resource(Default, '/default/<string:name>') # Route_1
api.add_resource(LiveStats, '/liveStats/<path:url>') # Route_2

if __name__ == '__main__':
 import os
HOST = os.environ.get('SERVER_HOST', 'localhost')    
try:
    PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
    PORT = 5555
app.run(HOST, PORT)

Теперь, во-первых, этот пост очень помог. how-to-pass-urls-as-параметры-in-a-get-request-inside- python - flask -restplus

Изменение того, что у меня изначально было.

 api.add_resource(LiveStats, '/liveStats/<string:url>') # Route_2  

к этому

api.add_resource(LiveStats, '/liveStats/<path:url>') # Route_2  

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

Пример, если я попробуйте это

localhost:60933/liveStats/http://address/Statistics?NoLogo=1%26KSLive=1

Я получил это

Trying to get http://address/Statistics

, поэтому он взлетел ?NoLogo=1%26KSLive=1

Как Вы предотвращаете это?

1 Ответ

0 голосов
/ 14 февраля 2020

Все символы после ? считаются параметрами. Из документов:

Для доступа к параметрам, представленным в URL (? Ключ = значение), вы можете использовать атрибут args:

searchword = request.args.get('key', '')

Мы рекомендуем обращаться к параметрам URL с помощью get или путем перехвата KeyError, поскольку пользователи могут изменить URL-адрес и представить им страницу с ошибочным запросом 400 в этом случае не удобно для пользователя.

Полный список методов и атрибуты объекта запроса, перейдите к документации по запросу.

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

Если вы не хотите обращаться к аргументам по отдельности, вы можете получить доступ к полной строке запроса:

request.query_string

Соедините все это вместе Я думаю, что это будет работать для вас:

class LiveStats(Resource):
  def get(self, url):
    return "Trying to get " + url + request.query_string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...