簡體   English   中英

使用php和curl不斷發布“缺少內容流”錯誤,以發布XML

[英]Keep getting a “missing content stream” error using php and curl to post XML

當維基文章的內容更改時,我試圖讓php發布到solr服務器。 這是SOLR版本4.4.0,PHP 5.3.3,CURL 7.19.7。

有人有什么想法嗎? 謝謝,皮特。

這是PHP代碼

$header = array("Content-Type: text/xml; charset=UTF-8");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://wiki.XXXXX.com:8080/solr/update?wt=json&indent=true");        
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,  $encoded);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
$result = curl_exec($ch);

這是錯誤

DEBUG - 2014-05-07 09:18:22.028; org.apache.solr.update.processor.LogUpdateProcessor; PRE_UPDATE FINISH {indent=true&wt=json&<add><doc>
<field type='string'+name%3D'segment'>100000000</field>%0a<field+type%3D'string'+name%3D'digest'>ed226ec873a622e54e26c0eb31f18e2f</field>%0a<field+type%3D'float'+name%3D'boost'>0</field></field>%0a<field+type%3D'text_general'+name%3D'content'>*+goofball%0a*+goofy</field>%0a<field+type%3D'text_general'+name%3D'title'>SolrIndexArticle+Test</field>%0a<field+type%3D'string'+name%3D'author'>Polsen</field>%0a<field+type%3D'long'+name%3D'_version_'></field>%0a</doc></add>%0a<commit+waitFlush%3D'false'+waitSearcher%3D'false'/>%0a}
INFO  - 2014-05-07 09:18:22.028; org.apache.solr.update.processor.LogUpdateProcessor; [collection1] webapp=/solr path=/update params={indent=true&wt=json&<add><doc>
<field type='string'+name%3D'segment'>100000000</field>%0a<field+type%3D'string'+name%3D'digest'>ed226ec873a622e54e26c0eb31f18e2f</field>%0a<field+type%3D'float'+name%3D'boost'>0</field>%0a<field+type%3D'url'+name%3D'host'>HOST URL</field>%0a<field+type%3D'url'+name%3D'url'>URL ID</field>%0a<field+type%3D'url'+name%3D'id'>URL ID</field>%0a<field+type%3D'text_general'+name%3D'content'>*+goofball%0a*+goofy</field>%0a<field+type%3D'text_general'+name%3D'title'>SolrIndexArticle+Test</field>%0a<field+type%3D'string'+name%3D'author'>Polsen</field>%0a<field+type%3D'long'+name%3D'_version_'></field>%0a</doc></add>%0a<commit+waitFlush%3D'false'+waitSearcher%3D'false'/>%0a} {} 0 12
ERROR - 2014-05-07 09:18:22.029; org.apache.solr.common.SolrException; org.apache.solr.common.SolrException: <strong>missing content stream</strong>
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:69)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

這是PHP錯誤日志輸出:

==> /data/php_errors.log <==

[07-May-2014 09:18:22] curr exited okay
[07-May-2014 09:18:22] Data returned...
[07-May-2014 09:18:22] ------------------------------------
[07-May-2014 09:18:22] HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 07 May 2014 13:18:22 GMT
Connection: close

{
  "responseHeader":{
    "status":400,
    "QTime":12},
  "error":{
    "msg":"missing content stream",
    "code":400}}

從帖子到Solr的“缺少內容流”意味着您向Solr發送了空文檔或根本沒有發送文檔。 在這種情況下,您似乎正在嘗試更新Solr中的某些內容-但是根據此錯誤,您沒有進行任何傳遞。 我也看不到您的代碼中包含或指向要更新的文檔的任何內容-

這些先前的討論可能會有所幫助:

SolrCore中“缺少內容流”異常的重要性是什么?

盡管此解決方案之前已在評論中給出,但我想在此處的單獨答案中予以強調。

Solr顯然會在沒有提交的請求上返回“缺少內容流”。 對於實際給出的內容文件,返回的錯誤令人困惑。

我正在分析使用Solarium客戶端執行extractOnly請求的類似情況。 在嘗試切換客戶端適配器並確保請求包括所選文件之后,我終於通過添加$request->setCommit( true );成功了$request->setCommit( true );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM