Получение параметра HTTP GET из URL с помощью Box API в Python

Я имею дело с API Box.com с использованием Python и у меня возникли проблемы с автоматизацией шага в процессе аутентификации.

Я могу предоставить свой ключ API и секретный ключ клиента в Box. После того, как Box.com примет мои учетные данные для входа, они предоставят мне параметр HTTP GET, например

'http://www.myapp.com/finish_box?code=my_code&'

Я хочу иметь возможность читать и хранить my_code используя питон. Есть идеи? Я новичок в Python и имею дело с API.

2 ответа

Решение

На самом деле это более надежный вопрос, чем кажется, поскольку он предоставляет некоторые полезные функции для веб-разработчика в целом. Вы в основном спрашиваете, как отделить my_code в строке 'http://www.myapp.com/finish_box?code=my_code&',

Что ж, давайте разберем это по частям. Прежде всего, вы знаете, что вам действительно нужны вещи только после знака вопроса, верно? Я имею в виду, что вам не нужно знать, с какого веб-сайта вы его получили (хотя это было бы неплохо сохранить, давайте оставим это на тот случай, если оно понадобится нам позже), вам просто нужно знать, какие аргументы передаются обратно. Давайте начнем с String.split():

>>> return_string = 'http://www.myapp.com/finish_box?code=my_code&'

>>> step1 = return_string.split('?')
["http://www.myapp.com/finish_box","code=my_code&"]

Это вернет список к шагу 1, содержащий два элемента, "http://www.myapp.com/finish_box" а также "code=my_code&", Ну, черт возьми, мы там! Давайте снова разделим вторую на знак равенства!

>>> step2 = step1[1].split("=")
["code","my_code&"]

Ну вот смотри, мы почти закончили! Тем не менее, это не позволяет более надежно использовать его. Что если вместо этого нам дадут:

>>> return_string = r'http://www.myapp.com/finish_box?code=my_code&junk_data=ohyestheresverymuch&my_birthday=nottoday&stackru=usefulplaceforinfo'

Внезапно наш план не работает. Давайте вместо этого разбить этот второй набор на & знак, так как именно это разделяет пары ключ: значение.

step2 = step1[1].split("&")
["code=my_code",
"junk_data=ohyestheresverymuch",
"my_birthday=nottoday",
"stackru=usefulplaceforinfo"]

Теперь мы куда-то добираемся. Давайте сохраним их как диктовку?

>>> list_those_args = []
>>> for each_item in step2:
>>>   list_those_args[each_item.split("=")[0]] = each_item.split("=")[1]

Теперь у нас есть словарь в list_those_args который содержит ключ и значение для каждого аргумента, который GET передал вам! Наука!

Итак, как вы получаете к нему доступ сейчас?

>>> list_those_args['code']
my_code

Для этого вам нужен веб-сервер и cgi-скрипт. Я установил единственное решение сценария Python для этого, чтобы запустить это. Вы можете увидеть мой код по адресу:

https://github.com/jkitchin/box-course/blob/master/box_course/cgi-bin/box-course-authenticate

Когда вы получаете доступ к сценарию, он перенаправляет вас в окно для аутентификации. После аутентификации, если во входящем запросе присутствует "код", код захватывается и перенаправляется на сайт, где предоставляются токены.

Вы должны настроить файл.htaccess для хранения вашего секретного ключа и идентификатора.

Другие вопросы по тегам