Вставьте документ в CouchDb, используя Mathematica - PullRequest
3 голосов
/ 18 января 2012

Я ищу способ вставить документ в базу данных CouchDb с помощью Mathematica.Основываясь на этом посте, я попробовал его, используя следующий код:

InsertDocument[key_, value_] := 
With[{url = 
  "http://couchdburl/database/"},
Import[url, "XML", "RequestMethod" -> "POST", 
 "RequestParameters" -> {"key" -> key, "value" -> value}]]

Но когда я пытаюсь выполнить его так, например:

InsertDocument[110, 1]

Я получаю следующую ошибку:

Import :: erropts: значение {key-> 110, value-> 1}, указанное для опции RequestParameters, недопустимо.>>

Редактировать:

После комментария kguler я преобразовал параметры в строку, и предыдущая ошибка исчезла.Я также исправил забытый} в моем примере кода и удалил конкатенацию URL с параметром ключа.Теперь я вижу другую ошибку:

Throw :: nocatch: Uncaught Throw [Null, Utilities URLTools Private URLTOOLSException[Utilities URLTools Private BADCONNECTION, http://couchdburl/database/]] возвращено вверхний уровень.>>

Я попытался сделать запрос, используя curl для URL-адреса couchDb, используя фиктивный документ:

curl -X POST http://couchdburl/database/ -H "Content-Type: application/json" -d {}

, и ответ был ожидаемым:

{"ok": true, "id": "57291ccea74c455beb2d7a37fe001624", "rev": "1-967a00dff5e02add41819138abb3284d"}

Мне все еще не хватает опции, которую следует использовать в функции импорта?Может быть, какой-то вариант установить тип содержимого как application / json?

1 Ответ

1 голос
/ 21 января 2012

Мне удалось сделать это, следуя той же идее, что и в этом ТАКОМ вопросе.

После некоторых проблем сработал следующий код:

<< JLink`

client = JavaNew["org.apache.commons.httpclient.HttpClient"];

method = JavaNew["org.apache.commons.httpclient.methods.PostMethod", 
   "http://couchdburl/database/"];

method@setRequestHeader["Content-Type", "application/json"];

entity = 
 JavaNew["org.apache.commons.httpclient.methods.StringRequestEntity", 
  "{\"key\":\"10\",\"value\":\"0\"}", "application/json", Null]

method@setRequestEntity[entity]

client@executeMethod[method]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...