curl请求通过c ++索引solr文档

时间:2016-05-17 06:52:56

标签: c++ curl solr

我在solr

中使用以下代码索引文档
CURL *curl = curl_easy_init(); 
CURLcode res;
if(curl) {
/* First set the URL that is about to receive our POST. This URL can
just as well be a https:// URL if that is what should receive the
    data. */
    curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.164:8983/solr/collection1/update?replacefields=false  -H 'Content-type: application/json' -d '[{\"id\":\"4000\", \"to\":\"Life is to.\", \"cc\":\"unknown \", \"subject\":\"Life\"}]'");

    /* Perform the request, res will get the return code */
    res = curl_easy_perform(curl);
     if(CURLE_OK == res){
        logger.LogError("res value CURLE_OK");
    }
    /* always cleanup */
    curl_easy_cleanup(curl);
}

和curl_easy_perform(curl)的返回值,即res是CURLE_OK但是记录没有在solr的collection1中编入索引,而从终端记录发布以下命令正在编制索引

curl http://192.168.0.164:8983/solr/collection1/update?replacefields=false  -H 'Content-type: application/json' -d '[{"id":"4000", "to":"Life is to.", "cc":"unknown ", "subject":"Life"}]'

1 个答案:

答案 0 :(得分:0)

您未向cURL提供正确的网址。实际URL -H 'Content-type: application/json' -d '[{\"id\":\"4000\", \"to\":\"Life is to.\", \"cc\":\"unknown \", \"subject\":\"Life\"}]'之后的所有内容都只是cURL命令行工具的参数,并且不是URL的一部分。

网址选项应仅为http://192.168.0.164:8983/solr/collection1/update?replacefields=false。其余参数必须设置为自己的curl_easy_setopt调用。

要将数据设置为POST,请使用CURLOPT_POSTFIELDS

  

传递char *作为参数,指向要在HTTP POST操作中发送的完整数据。您必须确保数据的格式符合您希望服务器接收数据的方式。

要设置正确的请求内容类型,请使用CURLOPT_HTTPHEADER

  

将指针传递给HTTP标头的链接列表,以传递给HTTP请求中的服务器和/或代理。相同的列表可用于主机和代理请求!

设置完所有选项后,请致电curl_easy_perform。您可能还希望在Solr服务器上查看日志以查看Solr是否生成异常。您还可以设置CURLOPT_ERRORBUFFERCURLOPT_VERBOSE以获取有关cURL内部任何故障的更多信息(只要cURL能够发出请求,就会返回CURLE_OK - 但如果服务器返回{则不会更改{ {1}}或400或服务器端的任何实际错误代码(如果设置了CURLOPT_FAILONERROR除外)。