httpclient взаимодействует с аннотатором ncbo, параметры установлены неправильно - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь взаимодействовать с аннотатором NCBO, задав несколько параметров и выполнив запрос. Однако запрос возвращает ошибку: «Запрещено: для вызова служб REST требуется действительный ключ API. Чтобы получить ключ API, посетите страницу http://bioportal.bioontology.org/account».

Мой код 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 [Дата: Пн, 02 Апр 2012 21:41:13 GMT, Сервер: Apache / 2.2.13 (Red Hat), Длина контента: 401, Варьируется: Accept-Encoding, Соединение: закрыть, Content-Type: text / xml; charset = UTF-8] "

Если я запускаю линию:

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

он возвращает мой правильный ключ API, поэтому кажется, что он установлен правильно.

Есть идеи, что я делаю неправильно? Спасибо.

1 Ответ

0 голосов
/ 06 апреля 2012

Я смог решить это:

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 не работает.

...