cfhttp как не кодировать знак плюс

Ситуация: я пытаюсь вызвать API-интерфейс LinkedIn из CFC ColdFusion, чтобы получить профиль пользователя и сеть (соединения). API LinkedIn заявляет, что для этого вы должны вызвать URL с областью действия =r_fullprofile+r_network.

Проблема: ColdFusion автоматически кодирует URL-адрес, поэтому знак плюс кодируется, а LinkedIn отклоняет мой вызов. Есть ли способ обойти это? Я разместил ссылку ниже на некоторые фрагменты кода на github, которые, как мне кажется, иллюстрируют проблему.

https://gist.github.com/4535364

Любая помощь будет оценена!

2 ответа

Решение

Поле области действия - это список, разделенный пробелами.

+ символ обычно используется в качестве ярлыка для пробела, так как он более читабелен, чем %20 (это то, что пространство кодирует).

Если использование символа "плюс" приводит к отправке закодированного символа "плюс" (%2B), у вас есть два других способа вставить пробел в URL:

  1. используя буквенный пробел или
  2. используя закодированное пространство %20

Попробуйте оба этих варианта, в идеале используйте сетевой снифер (например, WireShark), чтобы вы могли точно видеть, что отправляется.

Обновление: согласно комментариям ниже, %20 правильно, но строка на основе сигнатуры должна быть снова закодирована, поэтому для этого % становится %25, давая результат %2520,

Я немного обыскал это и вижу много примеров, когда ColdFusion плохо работает с API-интерфейсом LinkedIn. Поэтому я боюсь, что если вы решите эту проблему (хотя я еще не придумал альтернативы), возникнет другая проблема. Во время поиска я нашел несколько предложений от людей, чтобы использовать linkedin-j, Java-оболочку для API-интерфейсов LinkedIn. Вот некоторые из ссылок, которые я нашел:

Рабочий пример Coldfusion и Linkedin API

LinkedIn-J не возвращает образование

401 Несанкционированный ответ. API people / ~ и people / id =; ColdFusion, cfhttp

Проблема с обновлением статуса - 401 не авторизован - ColdFusion

linkedin-j Начало работы

Примечание: ваш пример кода на github делает cfhttp Вызовите "receive.cfm", но вы назвали файл "cfhttp_receiver.cfm". В этой строке:

<cfhttp url="http://#cgi.http_host#/sandbox/receiver.cfm?scope=#url.scope#" method="post" resolveurl="no">
Другие вопросы по тегам