path type variable in Flask API endpoint is splitting the variable value

Issue

I have an endpoint in my API like below:

from flask import Flask

app = Flask(__name__)

@app.route('/price/<path:url>/')
def Ex(url):
    return {'urlwas':url}

app.run()

The problem is that when I call the API with this http://127.0.0.1:5000/price/https://puresourceindia.in/store/index.php/?route=product/product&product_id=479

it should return this {"urlwas":"https://puresourceindia.in/store/index.php/?route=product/product&product_id=479"}

but it returns {"urlwas":"https://puresourceindia.in/store/index.php"}

I am unable to understand what is happening here, and how to tackle this situation?

Solution

You have to URL encode the parameter, the call should become:

http://127.0.0.1:5000/price/https%3A%2F%2Fpuresourceindia.in%2Fstore%2Findex.php%2F%3Froute%3Dproduct%2Fproduct%26product_id%3D479

and the result then becomes the one expected:

{"urlwas":"https://puresourceindia.in/store/index.php/?route=product/product&product_id=479"}

See here how to URL encode your string: https://www.urlencoder.org/

Answered By – Matteo Pasini

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published