Отправка URL-адреса в конечную точку Flask приводит к ошибке 500

#python #flask

#python #flask

Вопрос:

У меня есть конечная точка flask, определенная как показано ниже.

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

Я попытался отправить URL-адрес в трех разных форматах, каждый из которых каким-то образом дал сбой. И я не могу понять, как это отправить.

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

Строка, отличная от URL

 ## Curl
`curl http://localhost:8080/search/'sdfsdf'` 
 
 ## Result on console
 {"message": "Internal Server Error"}

 ## Result on server
 Invalid URL 'sdfsdf': No schema supplied. Perhaps you meant http://sdfsdf? 
 127.0.0.1 - - [28/Oct/2020 16:54:39] "GET /search/sdfsdf HTTP/1.1" 500 -
  

Строка URL

  ## Curl
 curl http://localhost:8080/search/'https://en.wikipedia.org/wiki/2016_United_States_presidential_election'

 ## Result on console
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <title>404 Not Found</title>
 <h1>Not Found</h1>
 <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>

 ## Result on server
 127.0.0.1 - - [28/Oct/2020 16:58:34] "GET /search/https://en.wikipedia.org/wiki/2016_United_States_presidential_election HTTP/1.1" 404 -
  

Строка URL с преобразованными косыми чертами и точками с запятой

 ## Curl
curl http://localhost:8080/search/'https://en.wikipedia.org/wiki/2016_United_States_presidential_election' 

 ## Result on console
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <title>404 Not Found</title>
 <h1>Not Found</h1>
 <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>

 ## Result on server
 127.0.0.1 - - [28/Oct/2020 16:57:35] "GET /search/https://en.wikipedia.org/wiki/2016_United_States_presidential_election HTTP/1.1" 404 -
  

API

 app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})
api = Api(app)
parser = reqparse.RequestParser()


##############################
# LOADERS
##############################

class SearchForPage (Resource):
    # SEARCHES FOR A MATCHING WIKIPEDIA URL
    # IF EXISTS RETURN
    #   Headers Array
    #   References Array
    # IF NOT EXISTS
    #   URL Not Found Message

    def get(self, query_url):
        print(query_url)
        if(query_url):
            title = ScrapeTitle(query_url)
            return("You sent me to : "   title)

        else:
            return ("I didn't find anything at: "   query_url)


##############################
# ROUTES
##############################

# Route_1
## ACCEPTS A URL AS A VARIABLE
## GET  (RETURNS) AN ID IF EXISTS
##      (RETURNS) 'NO RECORDS' IF NOT EXISTS
api.add_resource(SearchForPage, '/search/<string:query_url>')
  

Комментарии:

1. api.add_resource(SearchForPage.get, ‘/search/<строка:query_url>’)

2. Это приводит к: resource_func = self.output(resource.as_view(endpoint, *resource_class_args, AttributeError: 'function' object has no attribute 'as_view'

3. я не знаю, как вы написали resource_func, но если вы идете простым @app.route('/search/<search_query>', methods=['Get']) , то его становится легко реализовать и протестировать с помощью postman

4. Я не писал resource_func, это похоже на системную ошибку. Отдельно, зачем использовать @app.route , когда api.add_resource работает хорошо? Я ищу только то, что удаляет апострофы из URL-адреса, который передается в api.