Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / cURL, проблема с cookies (не сохраняются) / 21 сообщений из 21, страница 1 из 1
20.09.2013, 16:28
    #38402986
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Вдруг нарисовалась проблема со скриптом, который давно работал, а с какого-то момента перестал.
Создавал тему тут , но похоже что проблема связана не с 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
20.09.2013, 16:53
    #38403029
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Alibek B., ну для куки expires не указано - значит это сессионная кука. Живет до curl_close. Зачем вы на каждый запрос создаете и закрываете сессию?
...
Рейтинг: 0 / 0
20.09.2013, 17:50
    #38403092
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Я пробовал и не закрывать 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
21.09.2013, 09:28
    #38403373
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Хочу попробовать выставлять заголовки вручную.
Не подскажите, как получить заголовки от сервера (Set-Cookie), а потом добавлять их к отправляемым запросам?
...
Рейтинг: 0 / 0
21.09.2013, 10:23
    #38403385
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Пробую перехватить заголовки, не получается.
Подскажите, что не так?
Код: 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
21.09.2013, 11:35
    #38403406
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
CURLOPT_HEADER
...
Рейтинг: 0 / 0
21.09.2013, 11:48
    #38403413
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Почему-то не задаются куки.

Код: 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
21.09.2013, 12:03
    #38403418
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Сработал такой код:
Код: 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
21.09.2013, 13:46
    #38403467
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
А что находится в переменной?

Код: php
1.
2.
	curl_setopt($ch, CURLOPT_COOKIEFILE, $unifi_cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $unifi_cookies);
...
Рейтинг: 0 / 0
21.09.2013, 15:37
    #38403510
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
$unifi_cookies = "/tmp/unifi_cookie"
...
Рейтинг: 0 / 0
21.09.2013, 17:12
    #38403542
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
А так?
Код: 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
21.09.2013, 17:14
    #38403544
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Первоначально у меня так и было, init/close на каждый запрос.
Я по всякому пробовал, не сохранялись никак.
...
Рейтинг: 0 / 0
21.09.2013, 17:32
    #38403554
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
может библиотека кривая, вообще должно.
Доступ на запись в каталог у пользователя под которым выполняется процесс точно есть?
...
Рейтинг: 0 / 0
21.09.2013, 18:32
    #38403574
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Я ведь писал уже, на каталоге /tmp права 777.
...
Рейтинг: 0 / 0
21.09.2013, 19:41
    #38403600
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Alibek B.похоже что проблема связана не с PHP, а с cURLПопробуйте в качестве теста использовать нативный curl (из командной строки), без php.
...
Рейтинг: 0 / 0
22.09.2013, 11:02
    #38403806
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Я ведь в первом сообщении приложил листинг шелл-скрипта, который использовал нативный curl.
...
Рейтинг: 0 / 0
22.09.2013, 11:30
    #38403812
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cURL, проблема с cookies (не сохраняются)
Alibek B.,

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


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