我使用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上运行它。
尊重,
汤姆
希腊
答案 0 :(得分:5)
您应该有一个method
参数(GET
或POST
,您应该删除该端口。将该端口作为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>
我也高度建议您从参数中删除查询字符串名称。如果您决定要更改实现,那么您将遇到麻烦...只需接受您要为每个查询字符串值提供的值,而不是值本身的名称。