httpclient与ncbo注释器交互,参数设置不正确

时间:2012-04-02 21:54:21

标签: apache post httpclient

我试图通过设置一些参数,然后执行请求来与NCBO注释器进行交互。但是,查询会返回错误:“禁止访问:调用REST服务需要有效的API密钥。请访问http://bioportal.bioontology.org/account以获取API密钥。”

我的scala代码如下:

val annotatorUrl = "http://rest.bioontology.org/obs/annotator"

val client = new DefaultHttpClient()

var method = new HttpPost(annotatorUrl)

val params = new BasicHttpParams

params.setParameter("longestOnly", "true")
params.setParameter("wholeWordOnly", "true")
params.setParameter("filterNumber", "true")
params.setParameter("stopWords", "")
params.setParameter("withDefaultStopWords", "true")
params.setParameter("isTopWordsCaseSensitive", "false")
params.setParameter("mintermSize", "3")
params.setParameter("scored", "true")
params.setParameter("withSynonyms", "true")
params.setParameter("ontologiesToExpand", "")
params.setParameter("ontologiesToKeepInResult", "")
params.setParameter("isVirtualOntologyId", "true")
params.setParameter("semanticTypes", "")
params.setParameter("levelMax", "0")
params.setParameter("mappingTypes", "null")
params.setParameter("textToAnnotate", query)
params.setParameter("format", "xml")

params.setParameter("apikey", "MY_API_KEY")
method.setParams(params)

val response = client.execute(method)
return response.toString()

返回“HTTP / 1.1 403 Forbidden [Date:Mon,02 Apr 2012 21:41:13 GMT,Server:Apache / 2.2.13(Red Hat),Content-Length:401,Vary:Accept-Encoding,连接:close,Content-Type:text / xml; charset = UTF-8]“

如果我跑线:

return method.getParams().getParameter("apikey").toString()

它会返回正确的api密钥,因此似乎正确设置了它。

关于我做错的任何想法? 感谢。

1 个答案:

答案 0 :(得分:0)

我能够通过以下方式解决它:

var method = new HttpPost(annotatorUrl)
val params = new ArrayList[BasicNameValuePair]()

params.add(new BasicNameValuePair("apikey", apikey))
params.add(new BasicNameValuePair("textToAnnotate", query))
etc.

method.setEntity(new UrlEncodedFormEntity(params))

仍然不确定为什么setParams不起作用。