Ошибка при использовании CFHTTP

Я создал приложение на openBD, используя CFML. В приложении я использую CFHTTP следующим образом:

<cfcomponent output="false">
<cfprocessingdirective pageencoding="utf-8">
<cfset setEncoding("URL", "utf-8")>

  <cffunction name="search" access="remote" returnType="any" returnFormat="plain">        
      <cfargument name="q" type="string" default="" required="yes">       
      <cfargument name="rows" type="string" default="&rows=120" required="yes">   
      <cfargument name="score" type="string" default="&sort=score%20desc" required="yes">
      <cfargument name="highlight" type="string" default="&hl=true" required="yes">      
      <cfargument name="json" type="string" default="&wt=json" required="yes">
      <cfargument name="phrasehighlighter" type="string" default="&hl.usePhraseHighlighter=true" required="yes">
      <cfargument name="filtr" type="string" default="&fq=model:*" required="yes">
      <cfargument name="callbackP" type="string" required="false">

      <cfset theUrl = 'http://localhost:8090/solr/ktimatologio/select/?hl.requireFieldMatch=true&hl.fl=*&q=' & #Arguments.q# & #ARGUMENTS.rows# & #ARGUMENTS.score# & #ARGUMENTS.highlight# & #ARGUMENTS.json# & #ARGUMENTS.phrasehighlighter#>

      <cfhttp url= "#theUrl#"  result="rs"></cfhttp>
…………………
…………………
…………………
…………………
</cfcomponent>

Когда я запускаю его, я получаю сообщение об ошибке: "Не удалось установить URL: неверный запрос".

Я чертовски застрял! Что означает эта ошибка? Я думаю, что движок Adobe CFML работает правильно, но я не уверен. В моем "программирующем" колчане кончились стрелы! Мне нужно, чтобы это работало на openBD.

С уважением,

Том

Греция


person Community    schedule 21.08.2012    source источник


Ответы (1)


У вас должен быть аргумент method (либо GET, либо POST, и вы должны удалить порт. Добавьте порт в качестве атрибута port к тегу, например:

<cfset theUrl = 'http://localhost:8090/solr/ktimatologio...' />
<cfhttp method="get" url="#theURL#" port="8090" result="rs>

Вам также будет лучше добавить все эти значения строки запроса в виде тегов cfhttpparam вместо того, чтобы добавлять их в свой URL-адрес, например:

<cfset theUrl = 'http://localhost/solr/ktimatologio/select/>
<cfhttp method="get" url="#theURL#" port="8090" result="rs>
    <cfhttpparam type="URL" name="q" value="#Arguments.q#" />
    <cfhttpparam type="URL" name="wt" value="#Arguments.JSON" />
    .... more params ....
</cfhttp>

Я также настоятельно рекомендую удалить имя строки запроса из аргументов. Если вы решите изменить свою реализацию, у вас будут проблемы... Просто примите значение, которое вы хотите предоставить для каждого значения строки запроса, но не имя самого значения.

person Dan Short    schedule 21.08.2012
comment
Спасибо, мой друг! Мне нужно много читать о CFML. Еще раз спасибо! Пальцы вверх! - person ; 22.08.2012