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:
- используя буквенный пробел или
- используя закодированное пространство
%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
Примечание: ваш пример кода на github делает cfhttp
Вызовите "receive.cfm", но вы назвали файл "cfhttp_receiver.cfm". В этой строке:
<cfhttp url="http://#cgi.http_host#/sandbox/receiver.cfm?scope=#url.scope#" method="post" resolveurl="no">