Guzzle + openHAB REST API: "ошибка cURL 61: нераспознанный тип кодировки содержимого. Libcurl понимает кодировки содержимого deflate, gzip" - PullRequest
0 голосов
/ 04 августа 2020

У меня проблемы с Guzzle и REST API в моей openHAB-системе.

У меня есть fre sh Laravel 7 установка, где я использую Guzzle для извлечения вещей из openHAB API. Это отлично работает для GET-запроса к конечной точке /things. Однако, когда я пытаюсь отправить запрос на конкретную c конечную точку вещей /things/UUID, я получаю следующую ошибку:

GuzzleHttp\Exception\RequestException 

cURL error 61: Unrecognized content encoding type. libcurl understands deflate, gzip content encodings. (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)

Я не уверен, что именно это означает. Прилагается дамп ответа на запрос Guzzle в режиме отладки:

Создание экземпляра клиента Guzzle в PHP -коде:

$this->guzzle_client = new \GuzzleHttp\Client([
    'base_uri' => $protocol.$this->server_hostname.':'.$this->server_port.'/rest/',
    'verify' => false,
    'auth' => [$this->server_username, $this->server_password],
    'debug' => true,
]);         

Debug- вывод от клиента Guzzle:

*   Trying 10.0.0.63...
* TCP_NODELAY set
* Connected to 10.0.0.63 (10.0.0.63) port 8080 (#0)
> GET /rest/things HTTP/1.1
Host: 10.0.0.63:8080
User-Agent: GuzzleHttp/6.5.5 curl/7.64.1 PHP/7.3.11
Authorization: Basic Og==

Пока все хорошо ... Теперь возникает проблема:

Запрос Guzzle, который вызывает ошибку :

$response = $this->api()->request('GET', 'things/'.$uid);

Отладочный вывод из запроса Guzzle:

* Found bundle for host 10.0.0.63: 0x7fafc9d7acb0 [can pipeline]
* Re-using existing connection! (#0) with host 10.0.0.63
* Connected to 10.0.0.63 (10.0.0.63) port 8080 (#0)
> GET /rest/things/zwave%3Adevice%3A23daaff0%3Anode7 HTTP/1.1
Host: 10.0.0.63:8080
User-Agent: GuzzleHttp/6.5.5 curl/7.64.1 PHP/7.3.11
Authorization: Basic Og==

< HTTP/1.1 200 OK
< Content-Type: application/json
< Content-Encoding: UTF-8
< Content-Length: 7386
< Server: Jetty(9.4.20.v20190813)
< 
* Unrecognized content encoding type. libcurl understands deflate, gzip content encodings.
* Closing connection 0

Я не уверен, что здесь делать? Для Guzzle казалось бы тривиальной задачей получить что-то из openHAB API, поэтому я не понимаю, почему может возникнуть проблема с кодированием между этими двумя системами.

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 07 августа 2020

Это не ваша вина, а ошибка сервера.

Content-Encoding: UTF-8, которое вы получаете от сервера, неверно. Этот заголовок должен содержать тип кодировки передачи (например, gzip или deflate) , но не кодировку (UTF-8).

Лучший вариант - связаться с разработчиком сервера и исправить проблема там. До этого вы действительно ничего не можете сделать.

...