[英]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.