簡體   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