Solr通过使用HttpWebRequest的id命令删除会返回400错误请求

时间:2018-09-19 15:22:50

标签: c# solr bad-request system.net.httpwebrequest

这里,Solr删除命令(URL)面临非常奇怪的问题 命令:

http://12.345.678.910:8983/solr/mycore/update?commit=true&stream.body=<delete><id>434908</id></delete>&wt=json
http://12.345.678.910:8983/solr/mycore/update?commit=true&stream.body=%3Cdelete%3E%3Cid%3E434908%3C/id%3E%3C/delete%3E&wt=json

这非常简单,可以在任何浏览器中使用。 (第二个是浏览器发出的实际浏览器请求),但是当我使用C#HttpWebRequest调用相同的请求时,它们都不起作用,并且返回400-错误的请求错误。

我的代码如下:

private bool InvokeSolrCommand(string solrCommand)
        {
            try
            {
                //return true;

                string _response = string.Empty;

                HttpWebResponse objWebResponse;
                StreamReader srResponse;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
                HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(solrCommand);
                objRequest.ContentType = "text/xml";
                objRequest.Accept = "text/html,application/xhtml+xml,application/xml";
                objRequest.Method = "GET";
                objRequest.KeepAlive = true;
                objRequest.UserAgent = "TEST";
                //objRequest.ContentLength = 0;                
                objRequest.KeepAlive = true;
                objRequest.Timeout = 20000;

                objWebResponse = (HttpWebResponse)objRequest.GetResponse();

                if (objWebResponse.StatusCode == HttpStatusCode.OK)
                {
                    srResponse = new StreamReader(objWebResponse.GetResponseStream(), Encoding.UTF8);
                    _response = srResponse.ReadToEnd();
                    return true;
                }
                else
                {
                    Logger.LogError("InvokeSolrCommand()::Improper response from Solr (" + solrCommand + ")::Status Code=" + objWebResponse.StatusCode + "," + objWebResponse.StatusDescription + ". Retrying..");
                    return false;
                }
            }
            catch (WebException webEx)
            {
                //400 is handled here...
            }            
        }

我在Solr日志中观察到-发生以下异常:

ERROR true
RequestHandlerBase
org.apache.solr.common.SolrException: Unexpected EOF in prolog
org.apache.solr.common.SolrException: Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]
    at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:190)
    at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:97)
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:68)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:177)

你知道这里发生了什么吗? C#中还有其他方法可以调用此网址吗?

0 个答案:

没有答案