2014-09-12 1 views
0

Я делаю простой API-интерфейс python с помощью Bottle. Все работает нормально, пока я не предоставил параметр как что-то вроде http://sahildua.com/projects/. Даже если я отправлю URL-адрес в виде закодированной строки, он по-прежнему показывает ту же ошибку, то есть 404 Not Found.
Как заставить API принимать URL-адреса в качестве параметров с помощью запросов GET или POST с использованием Bottle-python

@route('/expand-url/<url>', method='GET') 
def expand(url = ""): 
    if url == "": 
     return {"success" : False} 

Что мне нужно изменить в @route инструкции, чтобы заставить его работать? Или есть другой способ отправки URL-адреса в качестве параметра?

ответ

1

Ваша проблема вызвана тем фактом, что в направлении, которое вы отправляете на свой маршрут, есть косые черты '/'. Бутылка правильно интерпретирует/разбирает вызов API, просто не с того, что вы ожидаете. С вашей текущей настройкой маршрута Bottle интерпретирует ваш вызов API как отправку значения projects/ на маршрут /expand-url/http://sahildua.com/ (которого не существует - следовательно, ошибка 404) вместо отправки значения URL http://sahildua.com/projects/ на маршрут /expand-url/<url> - Передние косые черты выбрасывают вещи, поэтому вам нужен другой подход.

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

Таким образом, ваш вызов API будет выглядеть как curl -XGET http://APIURL/expand-url?url=http://sahildua.com/projects/.

Затем вы можете получить URL-адрес в бутылке, используя: url = request.query.get('url', ''). то есть

@route('/expand-url', method='GET') 
def expand(): 
    url = request.query.get('url', '') 
    if url == "": 
     return {"success" : False} 

Этот код не проверен, но только чтобы дать вам представление.

+0

Это, кажется, все для меня. Но, давая синтаксическую ошибку на 'request'. Я это выясню. Большое спасибо :) – Sahil

+0

Удивительный! Я не импортировал запрос из Бутылки. Еще раз спасибо! : D – Sahil

+0

А, да, его нужно импортировать. Добро пожаловать :). – OkezieE