使用CFHTTP时出错

时间:2012-08-21 18:36:02

标签: coldfusion cfhttp openbd

我使用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>

当我运行它时,我收到错误消息:'无法设置网址:无效查询

我被困住了!这个错误意味着什么?我认为Adobe的CFML引擎工作正常,但我不确定。我的“编程”箭袋用完了箭头!我需要在openBD上运行它。

尊重,

汤姆

希腊

1 个答案:

答案 0 :(得分:5)

您应该有一个method参数(GETPOST,您应该删除该端口。将该端口作为port属性添加到标记中,例如这样:

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

您最好将所有这些查询字符串值添加为cfhttpparam标记,而不是将其附加到您的网址上,如下所示:

<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>

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