2013-12-12 4 views
0

У меня есть (как я полагаю) проблема с файлом cookie с cfhttp под Railo-Express-4.1.1.009.CFHTTP Cookie Issue

Мой код выполняет двухэтапный вызов http. Первый шаг выполняет авторизацию с удаленным приложением. В случае успеха, удаленный сервер возвращает куки авторизации, который извлекается и передается на второй вызов, как так:

<cfhttp url="http://remoteserver/targetPath" port="xxxx" method="get" result="Local.response" throwonerror="true" redirect="false"> 
     <cfhttpparam name="Action" value="Ping" type="URL" /> 
     <cfhttpparam name="mansession_id" value="#Local.result.authCookie#" type="cookie" /> 
</cfhttp> 

вызова HTTP успешен, но ответ по существу говорит, что я не уполномочен. (Это то, что «разрешенное разрешение» на самом деле означает в этом контексте).

<response='Error' message='Permission denied'... /> 

Однако тот же самый код (работать с той же самой коробки) удачен CF9:

<response='Success' ping='Pong' ... /> 

я дважды проверил заголовки ответа от первого вызова cfhttp, и проверил я прохождение правильный # Local.result.authCookie # значение второго вызова:

  • CFHTTP Результат = set-cookie : mansession_id="932a4086";
  • Local.result.authCookie = AUTHCOOKIE string 932a4086

Поскольку все то же самое, кроме двигателя, работающего на CFML, я пришел к выводу cfhttp, вероятно, не передавая печенье правильно. Я пробовал несколько вещей, но на данный момент у меня нет идей. Любые идеи о том, как решить проблему или продолжить ее устранение, будут весьма признательны.

Update:

я решил попробовать разные версии Railo (с версией Express, делает это так легко) и обнаружил, что код работает под 3.3.3.001 (но не 4.0.4.001). Так что что-то должно быть сломано в 4.x.

ответ

1

Я бы установил Fiddler, а затем добавил атрибуты proxyServer = localhost и proxyPort = 8888 для вызова CFHTTP. Затем вы можете посмотреть, как HTTP-запросы выходят через скрипач. Если ваш CF-сервер находится в другом поле, вы все равно можете запустить Fiddler на своем рабочем столе, просто включите «Разрешить другим компьютерам подключаться» в настройках Fiddler и укажите имя вашего компьютера вместо localhost в атрибуте proxyServer.

Вы находитесь в отличной ситуации, когда вы можете работать в некоторых средах, а не в других, так что вы должны быть в состоянии видеть, что происходит по-другому.

Вы можете либо вручную сравнить HTTP-запросы, либо настроить Fiddler на использование различного инструмента. Выберите два запроса, затем щелкните правой кнопкой мыши-> сравнить. Я очень рекомендую Beyond Compare 3 от Scooter Software в качестве отличного инструмента.

Обновите свой вопрос тем, что найдете, так как я хотел бы знать результат.

+0

Хорошие идеи. Сегодня мне нужно что-то выпустить, но завтра я попробую попробовать. – ihmg

+0

Скрипач сделал трюк. Вкладка «Куки» показала, что файл cookie, который я установил, не передается одинаково. Версия 3.x установила один файл cookie, но 4.x создал несколько файлов cookie. Все еще изучая, является ли это кодом или проблемой Railo (вероятно, код), но Fiddler очень помог. Еще раз спасибо!(Мне тоже хотелось бы проголосовать за это, но у меня пока не хватает репутации ...) – ihmg

+0

Очень рад, что сработал для вас! Хотя это не идеально, если вам нужен более тонкий контроль над тем, что вы отправляете, Railo использует HTTPClient под капотом, поэтому вы можете почти наверняка использовать это вместо CFHTTP для выпуска запросов: http://hc.apache.org/httpcomponents- клиент-га/quickstart.html – barnyr