Я пытаюсь перевести свой дом в режим «вдали», используя метод REST. Я пытаюсь сделать это с помощью cURL, но получаю сообщение «Отказано в соединении после перенаправления».
Мой код:
$ch = curl_init("https://developer-api.nest.com/structures/$id?auth=$access_token");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"away":"away"}');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $fp);
curl_setopt($ch, CURLOPT_PUT, true);
echo curl_exec($ch);
Журнал ошибок (с измененным моим идентификатором и кодом доступа):
* About to connect() to developer-api.nest.com port 443 (#0)
* Trying 54.235.247.171... * connected
* Connected to developer-api.nest.com (54.235.247.171) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_DHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate:
* subject: CN=developer-api.nest.com,OU=Domain Control Validated
* start date: Apr 10 21:26:03 2014 GMT
* expire date: Apr 10 21:26:03 2015 GMT
* common name: developer-api.nest.com
* issuer: CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O="GoDaddy.com, Inc.",L=Scottsdale,ST=Arizona,C=US
> PUT /structures/asdfghjkl?auth=c.asdfghjkl HTTP/1.1
Host: developer-api.nest.com
Accept: */*
Transfer-Encoding: chunked
Expect: 100-continue
< HTTP/1.1 100 Continue
< HTTP/1.1 307 Temporary Redirect
< Content-Type: application/json; charset=UTF-8
< Access-Control-Allow-Origin: *
< Cache-Control: private, no-cache, max-age=0
< Location: https://firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/structures/asdfghjkl?auth=c.asdfghjkl
< Connection: close
< Content-Length: 0
<
* Closing connection #0
* Issue another request to this URL: 'https://firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/structures/asdfghjkl?auth=c.asdfghjkl'
* About to connect() to firebase-apiserver03-tah01-iad01.dapi.production.nest.com port 9553 (#0)
* Trying 54.167.139.72... * Connection refused
* couldn't connect to host
* Closing connection #0
Любая идея, почему начальное соединение будет работать, но перенаправление не?
Я обнаружил, что проблема в том, что у моего веб-сервера был заблокирован порт 9553 на исходящей стороне, поэтому firebase не отказывал моему соединению, это был мой брандмауэр все время. После открытия порта 9553 все заработало нормально.
Других решений пока нет …