Desire2Learn Valence API — пробелы в имени файла

Мы пытаемся вытащить файлы и папки из шкафчика, но команда (/d2l/api/le/(D2LVERSION: версия)/locker/myLocker/(строка: путь)) не любит пробелы в файле или папке имя. Он возвращает либо Bad Request, либо Invalid Token в зависимости от того, как мы пытаемся обрабатывать пробелы на нашем конце (т.е. заменяем строку на %20).

Как бы мы получили файлы/папки с пробелами в имени?


person aapis    schedule 29.08.2012    source источник
comment
Могу я узнать, какую версию LMS вы используете (включая сервисный пакет)? Кажется, я могу создавать, проверять и удалять папки с пробелами в имени в шкафчике на экземпляре 9.4.1.   -  person Viktor Haag    schedule 30.08.2012
comment
Не могли бы вы также сообщить нам: используете ли вы клиентскую библиотеку D2L для аутентификации, и если да, то какую?   -  person Viktor Haag    schedule 30.08.2012
comment
PHP-библиотека Valence для аутентификации и версии 10.0.0.   -  person aapis    schedule 30.08.2012
comment
Хм. Я могу заставить это работать с клиентской библиотекой Python, работающей с экземпляром 9.4.1. Я опубликую здесь ответ, который предлагает что-то, что может вызвать проблемы, но может быть полезно, если вы откроете проблему с помощью средства отслеживания проблем D2L Valence (d2l.fogbugz.com/default.asp?pg=pgPublicEdit) для получения более подробной информации.   -  person Viktor Haag    schedule 30.08.2012


Ответы (1)


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

Когда вы указываете путь API к вашему объекту D2LUserContext, вам нужно передать только путь API с внутренними пробелами, а не с экранированными символами. Таким образом, правильный маршрут к файлу с именем test file name может выглядеть так:

/d2l/api/le/1.0/locker/myLocker/firstFolderBelowRoot/test file name

чтобы создать аутентифицированный URL-адрес для этого, вы должны вызвать

yourD2LUserContext.createAuthenticatedUri('/d2l/api/le/1.0/locker/myLocker/firstFolderBelowRoot/test file name', 'GET')

Это создаст аутентифицированный URL-адрес, который вы можете использовать для извлечения файла с именем test file name из вашего шкафчика. Чтобы получить содержащую его папку:

yourD2LUserContext.createAuthenticatedUri('/d2l/api/le/1.0/locker/myLocker/firstFolderBelowRoot/', 'GET')

Обратите внимание: если вы хотите идентифицировать папку в шкафчике, параметр path должен заканчиваться косой чертой. (Если вы пытаетесь получить папку и у вас нет завершающей косой черты, это может быть источником вашей проблемы.)

Когда у вас будет этот URL-адрес, вам нужно будет использовать какую-то HTTP-библиотеку, чтобы сделать вызов. Наши внутренние разработчики PHP рекомендовали использовать HttpRequest, а не cURL с PHP. В частности, URL-адрес, с которым вы должны сделать вызов, должен сохранять пробел в имени файла или папки в компоненте пути URL-адреса.

Когда я тестирую экземпляр 9.4.1, используя клиент Python для получения/вставки из шкафчика или для создания URL-адресов с использованием объекта пользовательского контекста, а затем загружая эти URL-адреса в браузер, все работает нормально. Тестирование на тестовом экземпляре 10.0.0 с использованием клиента Python также работает.

person Viktor Haag    schedule 30.08.2012