ColdFusion CFHTTP Post to remote form не возвращает страницу результатов, она просто возвращает форму ввода
Я использую ColdFusion 8. Я пытаюсь использовать CFHTTP Post для отправки формы на этой странице без ввода пользователем номера и нажатия кнопки Submit. 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.
Спасибо,
Богатые
5 ответов
Привет, Рич, причина, по которой тебе показывают форму вместо ожидаемых результатов, состоит в том, что шаблон "valid.jsp" ожидает, что у тебя будет действительный сеанс, когда ты нажмешь его, чтобы просмотреть результаты.
Еще одна вещь, которую я заметил, просматривая заголовки ответа сервера, состояла в том, что 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-вызов перед другими, чтобы установить сеанс перед вашим сообщением.
Итак, действительно ли данные отправляются на страницу BOEVerification или они никогда не заходят так далеко?
У меня возникла та же проблема, и я добавил CFID и Token к запросу: и заставил мой код работать.
Это может быть связано с адресом https. Вам, вероятно, потребуется импортировать сертификат в хранилище ключей Java для успешного подключения. Попробуйте этот пост для процесса добавления сертификата: http://www.coldfusionmuse.com/index.cfm/2005/1/29/keystore
Я предполагаю, что вы получаете страницу ввода, потому что сервер перенаправляет вас. Есть ли что-нибудь полезное в cfhttp.errordetail, если вы установите перенаправление на "нет"?