2012-04-02 69 views
0

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

我的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禁止[日期:星期一,2012年4月2日21点41分13秒GMT,服务器:Apache/2.2.13(红帽),内容长度:401,各不相同:接受编码,连接:关闭,内容类型:文本/ XML;字符集= UTF-8]”

如果我运行的行:

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

它返回我正确的API密钥,所以它似乎是s正确。

任何想法,我做错了什么? 谢谢。

回答

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没有工作。