3

我已经使用 CFML 在 openBD 上构建了一个应用程序。在应用程序中,我使用 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>

当我运行它时,我收到错误:'Failed to set URL: Invalid query'

我他妈卡住了!这个错误是什么意思?我认为 Adob​​e 的 CFML 引擎工作正常,但我不确定。我的“编程”箭袋用完了箭头!我需要在 openBD 上进行这项工作。

尊重地,

汤姆

希腊

4

1 回答 1

4

您应该有一个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>

我还强烈建议您从参数中删除查询字符串名称。如果您决定要更改您的实现,那么您将遇到麻烦......只需接受您要为每个查询字符串值提供的值,而不是值本身的名称。

于 2012-08-21T19:53:28.583 回答