powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / cURL, проблема с cookies (не сохраняются)
21 сообщений из 21, страница 1 из 1
cURL, проблема с cookies (не сохраняются)
    #38402986
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдруг нарисовалась проблема со скриптом, который давно работал, а с какого-то момента перестал.
Создавал тему тут , но похоже что проблема связана не с PHP, а с cURL.
И судя по поиску, проблема популярная. Но те решения, что нашел поискам, мне не подошли.
Первоначально был такой PHP-скрипт:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
$unifi_url = "https://10.10.0.250:8443";
$unifi_username = "user";
$unifi_password = "pass";
$unifi_cookies = "/tmp/unifi_cookie";

function unifi_login()
{
	global $unifi_url, $unifi_username, $unifi_password, $unifi_cookies;
	$url = "$unifi_url/login";
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_SSLVERSION, 3);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('login'=>'login','username'=>$unifi_username,'password'=>$unifi_password)));
	$res = curl_exec($ch);
	curl_close($ch);
}



С какого-то момента этот код перестал работать.
Чтобы локализовать проблему, использовал такой шелл-скрипт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#!/bin/sh

username=user
password=pass
baseurl=https://10.10.0.250:8443

cookie=/tmp/unifi_cookie
curl_cmd="curl --verbose -3 --cookie $cookie --cookie-jar $cookie --insecure "

echo
echo "**********************************************************************"
$curl_cmd --data "login=login" --data "username=$username" --data "password=$password" $baseurl/login
echo
echo "**********************************************************************"
$curl_cmd --data "json={}" $baseurl/api/stat/sta
echo
echo "**********************************************************************"
$curl_cmd $baseurl/logout
echo
echo "**********************************************************************"
echo

Вот что отвечает сервер при запуске этого скрипта (первого запроса):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
**********************************************************************
* About to connect() to 10.10.0.250 port 8443 (#0)
*   Trying 10.10.0.250...
* Adding handle: conn: 0x8014a9300
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x8014a9300) send_pipe: 1, recv_pipe: 0
* Connected to 10.10.0.250 (10.10.0.250) port 8443 (#0)
* successfully set certificate verify locations:
*   CAfile: /usr/local/share/certs/ca-root-nss.crt
  CApath: none
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using EDH-RSA-DES-CBC3-SHA
* Server certificate:
*        subject: C=US; ST=CA; L=San Jose; O=ubnt.com; OU=UniFi; CN=UniFi
*        start date: 2013-06-28 10:42:01 GMT
*        expire date: 2023-06-26 10:42:01 GMT
*        issuer: C=US; ST=CA; L=San Jose; O=ubnt.com; OU=UniFi; CN=UniFi
*        SSL certificate verify result: self signed certificate (18), continuing anyway.
> POST /login HTTP/1.1
> User-Agent: curl/7.31.0
> Host: 10.10.0.250:8443
> Accept: */*
> Content-Length: 41
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 41 out of 41 bytes
< HTTP/1.1 302 Moved Temporarily
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Set-Cookie: unifisession=1465521DF2DAB756CEE35ED44A97C585; Path=/; Secure
< Location:  https://10.10.0.250:8443/manage 
< Content-Type: text/html;charset=UTF-8
< Content-Length: 0
< Date: Fri, 20 Sep 2013 12:26:25 GMT
< 
* Connection #0 to host 10.10.0.250 left intact

То есть куки отдает (Set-Cookie: unifisession=1465521DF2DAB756CEE35ED44A97C585).
Однако файла /tmp/unifi_cookie не создается.
Даже если этот файл создать вручную и назначить ему права 666 или 777, после запуска скрипта этот файл не изменяется (в него не сохраняются значения).

Не подскажите, куда нужно копать?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403029
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Alibek B., ну для куки expires не указано - значит это сессионная кука. Живет до curl_close. Зачем вы на каждый запрос создаете и закрываете сессию?
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403092
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пробовал и не закрывать curl, но ничего не менялось — все также не создаются куки и сервис отвечает { "data" : [ ] , "meta" : { "msg" : "api.err.LoginRequired" , "rc" : "error"}}
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
function unifi_info($mac)
{
	global $unifi_url, $unifi_username, $unifi_password, $unifi_cookies;
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_URL, "$unifi_url/login");
	curl_setopt($ch, CURLOPT_SSLVERSION, 3);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('login'=>'login','username'=>$unifi_username,'password'=>$unifi_password)));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
	$res = curl_exec($ch);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_URL, "$unifi_url/api/stat/sta");
	curl_setopt($ch, CURLOPT_SSLVERSION, 3);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('json'=>'{}')));
	$res = curl_exec($ch);
	print_r($res);
	curl_close($ch);
	return $ret;
}
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403373
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу попробовать выставлять заголовки вручную.
Не подскажите, как получить заголовки от сервера (Set-Cookie), а потом добавлять их к отправляемым запросам?
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403385
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую перехватить заголовки, не получается.
Подскажите, что не так?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$hdr = fopen("php://memory", "r+");
...
$curl = curl_init();
...
curl_setopt($curl, CURLOPT_WRITEHEADER, $hdr);
...
rewind($hdr);
while($line = fgets($hdr)){
  echo "line=$line\n";
}
...


Получаю ошибки:
phpWarning: curl_setopt(): supplied argument is not a valid File-Handle resource in /data/sites/hotspot/lib/hotspot_unifi.php on line 26
Warning: rewind() expects parameter 1 to be resource, null given in /data/sites/hotspot/lib/hotspot_unifi.php on line 43
Warning: fgets() expects parameter 1 to be resource, null given in /data/sites/hotspot/lib/hotspot_unifi.php on line 44
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403406
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CURLOPT_HEADER
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403413
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то не задаются куки.

Код: php
1.
2.
3.
4.
5.
curl_setopt($unifi_curl, CURLOPT_URL, "...");
curl_setopt($unifi_curl, CURLOPT_COOKIE, $cookies);
echo "$cookies\n";
$res = curl_exec($curl);
print_r(curl_getinfo($curl, CURLINFO_HEADER_OUT));



Получаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
unifisession=9D51558AFA6DE5849D0E885EBCDC2FE1

POST /api/stat/sta HTTP/1.1
Host: 10.10.0.250:8443
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

То есть CURLOPT_COOKIE почему-то не срабатывает и в запросе куки не отправляются.
Отчего такое может быть?

Я конечно попробую задать их через CURLOPT_HEADER, но почему не работает CURLOPT_COOKIE?
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403418
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сработал такой код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
$hdr = fopen("php://memory", "r+");
$curl = curl_init();
//curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_WRITEHEADER, $hdr);
curl_setopt($curl, CURLOPT_URL, "$url/login");
curl_exec($curl);
rewind($hdr);
$cookie = array();
while($line = fgets($hdr))
{
  $line = rtrim($line);
  $p = strpos($line,': ');
  if ($p !== false)
  {
    if (substr($line,0,$p+2) === 'Set-Cookie: ')
    {
      $line = substr($line,$p+2);
      if (strpos($line,'; ') !== false) $line = substr($line,0,strpos($line,'; '));
      $cookie[] = $line;
    }
  }
}
$cookies = implode('; ',$cookie);
curl_setopt($curl, CURLOPT_URL, "$url/api/stat/sta");
//curl_setopt($curl, CURLOPT_COOKIE, $cookies);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Cookie: $cookies"));
$res = curl_exec($curl);
...



Но это какие-то танцы с бубном напоминает.
Не подскажите, почему не срабатывает CURLOPT_COOKIE?
И вообще, почему перестал работать скрипт? Ведь раньше он работал (сессионные куки сохранялись в CURLOPT_COOKIEJAR).
Веб-сервис на моем сервере и не обновлялся, скрипт тоже не изменялся. Обновится мог разве что PHP и cURL.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403467
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что находится в переменной?

Код: php
1.
2.
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403510
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$unifi_cookies = "/tmp/unifi_cookie"
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403542
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
function unifi_info($mac)
{
	global $unifi_url, $unifi_username, $unifi_password, $unifi_cookies;
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_URL, "$unifi_url/login");
	curl_setopt($ch, CURLOPT_SSLVERSION, 3);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('login'=>'login','username'=>$unifi_username,'password'=>$unifi_password)));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
	$res = curl_exec($ch);
        curl_close($ch);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_URL, "$unifi_url/api/stat/sta");
	curl_setopt($ch, CURLOPT_SSLVERSION, 3);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('json'=>'{}')));
	$res = curl_exec($ch);
	print_r($res);
	curl_close($ch);
	return $ret;
}
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403544
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первоначально у меня так и было, init/close на каждый запрос.
Я по всякому пробовал, не сохранялись никак.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403554
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может библиотека кривая, вообще должно.
Доступ на запись в каталог у пользователя под которым выполняется процесс точно есть?
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403574
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ведь писал уже, на каталоге /tmp права 777.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403600
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.похоже что проблема связана не с PHP, а с cURLПопробуйте в качестве теста использовать нативный curl (из командной строки), без php.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403806
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ведь в первом сообщении приложил листинг шелл-скрипта, который использовал нативный curl.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38403812
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Тады остается одно - писать баг-рипорт и/или откатиться на предыдущую версию.
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38406844
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная ошибка:
Код: plaintext
Fatal error: Call to undefined function curl_reset() in ... on line 19
Если curl_reset закомментировать, остальное работает.
Но мне нужно сбрасывать некоторые параметры (например CURLOPT_WRITEHEADER), а без curl_reset их сбрасывать не получается (при попытке задать для CURLOPT_WRITEHEADER значение null получаю ошибку).
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38406852
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается функция доступна только с версии PHP 5.5, а у меня 5.4.
Не посоветуете, чем ее заменить?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
cURL, проблема с cookies (не сохраняются)
    #38897773
Что касается кук насамом то деле они еще как сохраняются, только вот вопрос в том куда php бросит етот файлик! вчасности эсли прописываю имя файла "cookie.txt" то он у меня бросает его в папочьку bin в апаче
...
Рейтинг: 0 / 0
cURL, проблема с cookies (не сохраняются)
    #38897807
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добродеятельвопрос в том куда php бросит етот файлик!Указывайте полный путь к файлу и вопрос отпадёт сам собой.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / cURL, проблема с cookies (не сохраняются)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]