繁体   English   中英

将 Content-type 标头设置为 Elasticsearch-php 客户端

[英]Set Content-type header to Elasticsearch-php client

我正在尝试使用 Elasticsearch-php 5.0 版将搜索查询发送到 Elasticsearch 6.4.2。

从 5.0 到 6.0 的重大变化之一是“ 严格的内容类型验证”,这意味着对 Elasticsearch 的请求必须使用“Content-type: application/json”标头发送。

为了添加此标题,我尝试使用此线程中的polyfractal 建议:

    $params = [
    'index' => $index,
    'type' => $mapping,
    'body' => $query,
    'client' => [
        'curl' => [CURLOPT_HTTPHEADER => array('Content-type: text/plain')]
        ]
    ];

    $res = $this->mESClient->search($params); // this is Elasticsearch/Client

    return $res;

但是出于某种原因,当代码尝试执行curl_setopt_array()并且请求是网络发送时,我不断收到“注意:数组到字符串的转换”。

请注意:当我删除 $params 数组的“客户端”部分时,Elasticsearch 正在接收请求。

根据Version Matrix ,处理 ES >=6 时应该使用 elasticsearch-php 6.0。

elasticsearch-php 5.0 与 ElasticSearch 6 不兼容。

您提到的线程与 ES-PHP 1.x/2.x 相关,它的选项语法可能不同。 它与您的情况无关,只是其中一条评论与我刚刚在上面所做的相同。

仅供参考,如果您使用的是 Elasticsearch 6.0+,您也需要将 ES-PHP 客户端升级到 6.0 分支。 ES-PHP 6.0+ 自动设置内容类型标头:fd3b0f1

发现问题了。 在尝试使用 curl 设置 HTTP 标头并在 URL 中指定授权详细信息时,似乎存在一个有问题的功能。

例如:https://用户名:密码@host:port

由于某种原因,客户端将 curl http 标头复制到其他 curl 选项(需要字符串而不是数组),因此,从 curl_setopt_array 抛出的数组到字符串转换的异常。

当我从主机 URL 中删除授权详细信息并使用 curl 授权标头时,一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM