Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Установка и передача cookie в заголовках

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
maksimn
Отправлено: 10 Сентября, 2014 - 09:54:21
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Здравствуйте!
Есть сервер, с которым необходимо устанавливать соединение.
После первого запроса сервер возвращает в заголовке ключ, с которым нужно будет отправлять все последующие запросы.

Вот такой заголовок приходит после первого запроса:
CODE (text):
скопировать код в буфер обмена
  1. HTTP/1.1 303 See Other
  2. Server: nginx/1.6.0
  3. Date: Tue, 09 Sep 2014 10:49:38 GMT
  4. Content-Length: 0
  5. Connection: keep-alive
  6. Set-Cookie: ring-session=cc678922-2dba-47fe-bc5c-5c7436b1496a;Path=/
  7. Location: /
  8. Access-Control-Allow-Origin: http://*****.ru



Сейчас все это работает криво.
Я ищу в заголовке ответа сервера нужную мне переменную, а потом вставляю ее в свой заголовок следующего запроса. :
PHP:
скопировать код в буфер обмена
  1. $s = fsockopen($ip, 30080, $errstr, $errno, 10);
  2.         if (!$s) {
  3.             echo "$errstr ($errno)<br />\n";
  4.         } else {
  5.                 $post_data = "username=name&password=pass";
  6.                
  7.                 $out = "POST /login HTTP/1.1\r\n";
  8.                 $out .= "Host: $ip\r\n";
  9.                 $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
  10.                 $out .= "Content-Length: ".strlen($post_data)."\r\n\r\n";
  11.                 $out .= $post_data."\r\n\r\n";
  12.                
  13.                 fputs($s, $out);
  14.                 // Бегаем по строчкам ответа
  15.                 while (!feof($s)) {
  16.                         $line = fgets($s);
  17.                         $key = "ring-session";
  18.                         // Если в строке есть ring-session - вырезаем его в переменную
  19.                         if(strstr($line, $key)){
  20.                                 preg_match('/=(.*?);/', $line, $output);
  21.                                 $rs = $output[1];
  22.                         }
  23.                 }
  24.             fclose($s);
  25.         }
  26.         if($rs){
  27.                 //тут запоминаю куку, но это не работает
  28.                 //setcookie("ring-session", $rs, time() + 30 * 24 * 60 * 60);
  29.                 $s = fsockopen($ip, 30080, $errstr, $errno, 10);
  30.                 if (!$s) {
  31.                     echo "$errstr ($errno)<br />\n";
  32.                 } else {
  33.                         $params = new stdClass;
  34.                         $params->username = "uname";
  35.                         $params->session = "sid";
  36.                        
  37.                         $post_data = json_encode(array('action' => 'login', 'params'=>$params));
  38.                        
  39.                         $out = "POST /api HTTP/1.1\r\n";
  40.                         $out .= "Host: $ip\r\n";
  41.                         $out .= "Content-Type: application/json\r\n";
  42.                         // вставляю в заголовок ключ
  43.                         $out .= "Cookie: ring-session=".$rs."\r\n";
  44.                         $out .= "Content-Length: ".strlen($post_data)."\r\n\r\n";
  45.                         $out .= $post_data."\r\n\r\n";
  46.                        
  47.                         fputs($s, $out);
  48.                         while (!feof($s)) {
  49.                                 echo fgets($s)."<br/>";
  50.                         }
  51.                     fclose($s);
  52.                 }
  53.                
  54.         }else{
  55.                 echo "Не удалось получить ключ!";
  56.         }
  57.  

Насколько я понимаю, после того как мне прилетает в заголовке строка
CODE (text):
скопировать код в буфер обмена
  1. Set-Cookie: ring-session=cc678922-2dba-47fe-bc5c-5c7436b1496a;Path=/

я должен запомнить в браузер эту куку, и в последующих запросах в моих заголовках автоматом должна быть строка
CODE (text):
скопировать код в буфер обмена
  1. Cookie:  ring-session=cc678922-2dba-47fe-bc5c-5c7436b1496a

а пока я это все руками подставляю.
Если запомнить куку в браузер, то во втором запросе в заголовок эта кука не попадает, т.к. возвращается ошибка.

п.с.
а еще почему-то очень долго проходит запрос, на каждый примерно по 1-2 минуте! может я не те методы передачи данных использую?

Спасибо!
 
 Top
Мелкий Супермодератор
Отправлено: 10 Сентября, 2014 - 10:15:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Не изобретайте curl. Это тупо кука, пусть curl сам её и отслеживает.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB