项目中使用laravel-admin,版本为:5.3.31,是老版本了。但是最近要升级软件环境,将PHP版本由5.6.34升级到7.3.28,升级后引出一系列问题,其他问题逐一解决,基本都是些函数弃用的问题。
但是项目中用到elasticsearch,搜索时报错:{“error”:“Content-Type header [] is not supported”,“status”:406},出现问题后网上也搜了一下,大都是curl请求时需要增加头部信息,问题也确实出在这,但是解决方法大都是命令行, 如:curl -H “Content-Type: application/json” -XPOST。一般命令行请求确实可以解决。
ES中需要改动部分文件。
解决办法为:找到文件:
CODE-XXXvendorelasticsearchelasticsearchsrcElasticsearchConnectionsConnection.php
构造方法中参数初始化,增加Content-Type等参数,如下:
public function __construct($handler, $hostDetails, $connectionParams,
SerializerInterface $serializer, LoggerInterface $log, LoggerInterface $trace)
{
if (isset($hostDetails['port']) !== true) {
$hostDetails['port'] = 9200;
}
if (isset($hostDetails['scheme'])) {
$this->transportSchema = $hostDetails['scheme'];
}
if (isset($hostDetails['user']) && isset($hostDetails['pass'])) {
$connectionParams['client']['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_BASIC;
$connectionParams['client']['curl'][CURLOPT_USERPWD] = $hostDetails['user'].':'.$hostDetails['pass'];
}
//升级php7.3+后,es搜索报错:{"error":"Content-Type header [] is not supported","status":406}
//请求时需增加头部信息即可
$connectionParams['client']['curl'][CURLOPT_HTTPHEADER] = ['Accept: application/json', 'Content-Type: application/json'];
$host = $hostDetails['host'].':'.$hostDetails['port'];
$path = null;
if (isset($hostDetails['path']) === true) {
$path = $hostDetails['path'];
}
$this->host = $host;
$this->path = $path;
$this->log = $log;
$this->trace = $trace;
$this->connectionParams = $connectionParams;
$this->serializer = $serializer;
$this->handler = $this->wrapHandler($handler, $log, $trace);
}



