ColdFusion CFHTTP Сообщение в удаленной форме не возвращает страницу результатов, а просто возвращает форму ввода

Я использую ColdFusion 8. Я пытаюсь использовать CFHTTP Post для отправки формы на этой странице, при этом пользователю не нужно вводить номер и нажимать «Отправить». https://testefile.boe.ca.gov/boewebservices/verification.jsp?action=SALES

Я делал это раньше с другими формами, обычно это не проблема.

Вот мой код:

<cfhttp url="https://testefile.boe.ca.gov/boewebservices/servlet/BOEVerification" method="POST" port="443" resolveurl="yes" redirect="yes">
<cfhttpparam type="FORMFIELD" name="type" value="SALES">
<cfhttpparam type="FORMFIELD" name="account" value="10003">
<cfhttpparam type="FORMFIELD" name="Submit" value="Submit+Request">
</cfhttp>

<Cfoutput>#cfhttp.fileContent#</CFOUTPUT>

<cfdump var="#cfhttp#">

Если вы попробуете заполнить форму вручную и введете номер учетной записи 10003, она вернет страницу результатов https://testefile.boe.ca.gov/boewebservices/verification_results.jsp

Но когда я использую CFHTTP Post, он просто возвращает страницу ввода https://testefile.boe.ca.gov/boewebservices/verification.jsp?action=SALES

Один из их разработчиков сделал страницу Java, чтобы сделать то же самое, что и я, и это сработало. К сожалению, я не знаю Java.

Благодарность,

Богатый


person Rich    schedule 04.06.2009    source источник
comment
Можете ли вы поделиться кодом Java, который работал?   -  person Patrick McElhaney    schedule 10.06.2009
comment
код слишком велик, чтобы добавить его в качестве комментария. Я попытался добавить новый ответ ниже, но stackoverflow подумал, что я отвечаю на свой вопрос. Подготовлю ссылку на него.   -  person Rich    schedule 11.06.2009


Ответы (5)


Привет, Рич, причина, по которой вам показывается форма вместо ожидаемых результатов, заключается в том, что шаблон «verification.jsp» ожидает, что у вас будет действительный сеанс, когда вы нажмете его для просмотра результатов. ‹cfhttp> не поддерживает состояние самостоятельно, поэтому такой проект, как Ben Nadel CFHttpSession.cfc может помочь. CFHttpSession будет управлять файлами cookie (и, следовательно, сеансом) между вызовами ‹cfhttp>, интерпретируя результаты заголовка Set-Cookie и добавляя их обратно при последующих вызовах.

Еще одна вещь, которую я заметил при просмотре заголовков ответов сервера, заключалась в том, что файл cookie сеанса (jsessionId) был установлен на «безопасный». Это означает, что файл cookie может использоваться только защищенными соединениями. У меня не настроен SSL в моей тестовой среде, поэтому мои попытки использовать объект Бена не увенчались успехом, но я думаю, что есть хороший шанс, что он сработает, если вы сможете протестировать соединение SSL.

Вот простой тест, который я сделал, используя проект Бена:

<!--- CFHttpSession does not follow redirects, this is why two calls are needed --->
<cfset objHttpSession = CreateObject("component","CFHTTPSession").Init() />

<cfset objResponse = objHttpSession.NewRequest( "https://testefile.boe.ca.gov/boewebservices/servlet/BOEVerification" )
 .AddFormField( "type", "SALES" )
 .AddFormField( "account", 10003 )
 .AddFormField( "Submit", "Submit+Request" )
 .Post()/>

<cfset objResponse = objHttpSession
 .NewRequest( "https://testefile.boe.ca.gov/boewebservices/verification.jsp" )
 .get() />

<cfoutput>#objResponse.filecontent#</cfoutput>

** Также может потребоваться сделать еще один http-вызов перед остальными, чтобы установить сеанс перед вашим сообщением.

person jalpino    schedule 11.06.2009
comment
спасибо Джалпино. Я попробовал, и он сделал то же самое, просто вернул страницу формы ввода вместо страницы результатов. - person Rich; 11.06.2009
comment
Сожалею, что Рич... вы тестировали SSL? - person jalpino; 12.06.2009
comment
Это хорошо сработало для меня, когда внешний сайт переключился на https. Утилита Бена упростила работу с безопасными файлами cookie и т. д. - person Mark; 02.08.2013

Это может быть из-за https-адреса. Вам, вероятно, потребуется импортировать сертификат в хранилище ключей Java для успешного подключения. Попробуйте этот пост для процесса добавления сертификата: http://www.coldfusionmuse.com/index.cfm/2005/1/29/keystore

person Antony    schedule 05.06.2009
comment
мы попробовали это локально (на удаленном сайте), и это все равно не удалось, так что, вероятно, это не ключ. это какая-то проблема CFHTTP, я думаю... - person Rich; 06.06.2009
comment
когда вы пробовали это локально, вы все еще использовали адрес https? Потому что тогда это вполне может быть проблема с сертификатом. CFHTTP требователен к сертификатам - person Eli; 11.06.2009

Я предполагаю, что вы получаете страницу ввода, потому что сервер перенаправляет вас. Есть ли что-нибудь полезное в cfhttp.errordetail, если вы установите перенаправление на «нет»?

person Eli    schedule 10.06.2009
comment
если я установлю перенаправление на no, cfhttp.errorDetail будет пустым. если я устанавливаю для перенаправления значение «нет», код состояния возвращает 302 «Временно перемещено». cfhttp.location: testefile.boe.ca.gov/boewebservices/verification_results.jsp который, если вы перейдете напрямую, вернет форму ввода. Я думаю, что coldfusion не передает поля формы на страницу перенаправления - person Rich; 11.06.2009

Так действительно ли данные отправляются на страницу BOEVerification или они никогда не заходят так далеко?

person Community    schedule 10.06.2009
comment
да, я разговаривал с их разработчиками, и в их логах они видят, как туда попал мой пост. - person Rich; 11.06.2009

У меня была та же проблема, и я добавил CFID и токен в запрос: и мой код заработал.

person Community    schedule 05.08.2009