Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: отправка на сервер пост данных и запись куки
 
 автор: dima2207   (10.10.2009 в 02:11)   письмо автору
 
 

всем привет !
собственно говоря проблема такого рода .
кто знает как можно отправить на сервер методом пост переменные и при получении ответа записывать куки что передает сервер .

  Ответить  
 
 автор: dios™   (10.10.2009 в 02:50)   письмо автору
 
   для: dima2207   (10.10.2009 в 02:11)
 

А можно по-подробнее описать проблему?
Потому что сейчас единственное, что лезет в голову это
1). Сделать форму с запросом

<form method="POST" action="script.php">
   <input type="text" name="data">
   <input type="submit" value="Submit">
</form>

2).Сделать скрипт, обрабатывающий эту форму "script.php"

<?php
$data 
$_POST['data'];
setcookie('data'$datatime() + 60*60);//Установка куки на час
?>

  Ответить  
 
 автор: dima2207   (10.10.2009 в 03:14)   письмо автору
 
   для: dios™   (10.10.2009 в 02:50)
 

нет , все намнго сложнее .
отправляем на сервер параметры при помощи библиотеки курл и при получении данных нужно записать все принятые куки :

<?
    
function make_http_post_request($url$post$ssl true$headers ''$uagent '') {
       if (empty(
$url)) {
           return 
false;
       }

       
$_post = Array();

       if (
is_array($post)) {
           foreach (
$post as $name => $value) {
               
$_post[] = $name.'='.urlencode($value);
           }
       }

       
$ch curl_init($url);

       if (
$ssl) { // если соединяемся с https

           
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
           
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);

       }

       
curl_setopt($chCURLOPT_RETURNTRANSFER1);
       
curl_setopt($chCURLOPT_POST1);
       
curl_setopt($chCURLOPT_HEADER0);
       
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);

       if (
is_array($post)) {
           
curl_setopt($chCURLOPT_POSTFIELDSjoin('&'$_post));
       }

       if (
is_array($headers)) { // если заданы какие-то заголовки для браузера
           
curl_setopt($chCURLOPT_HTTPHEADER$headers);
       }

       if (!empty(
$uagent)) { // если задан UserAgent
           
curl_setopt($chCURLOPT_USERAGENT$uagent);
       }

       
$result curl_exec($ch);

       if (
curl_errno($ch) != && empty($result)) {
           
$result false;
       }

       
curl_close($ch);

       return 
$result;
   }

?>

  Ответить  
 
 автор: dios™   (10.10.2009 в 11:43)   письмо автору
 
   для: dima2207   (10.10.2009 в 03:14)
 

Возможно выходом из ситуации будет получении содержимого при помощи функции
http://ee.php.net/manual/en/function.curl-multi-getcontent.php, дальнейшая обработка возвращённых заголовков и установка куки.

  Ответить  
 
 автор: dima2207   (10.10.2009 в 15:10)   письмо автору
 
   для: dios™   (10.10.2009 в 11:43)
 

не , нето , дело в том что обработка полученных данных происходит на другом сервере . и поставить куки с именем домена что передал данные не получится!

  Ответить  
 
 автор: dios™   (10.10.2009 в 15:16)   письмо автору
 
   для: dima2207   (10.10.2009 в 15:10)
 

Так загвоздка в том, что бы поставить куки с именем домена, который их передал? Или в том, что бы "украсть" куки, которые пытается ставить другой сервер?

  Ответить  
 
 автор: dima2207   (10.10.2009 в 17:05)   письмо автору
 
   для: dios™   (10.10.2009 в 15:16)
 

никто красть не собирается , просто при авторизации на одном сайте ставятся куки ! нельзя упускать из виду этот факт , а так как авторизацию производит скрипт ане браузер , то я испытываю некоторые проблемы с установкой куки !

  Ответить  
 
 автор: neadekvat   (10.10.2009 в 17:51)   письмо автору
 
   для: dima2207   (10.10.2009 в 17:05)
 

Ну допустим запускаете вы скрипт на test1.ru, который делает запрос к test2.ru. Test2.ru возвращет команду установить куки, но сделать то это должен будет test1.ru на вашем браузере, не так ли? Но test.1ru для test2.ru кукисы устанавливать не имеет права. Иначе, если любые кукисы будут доступны любому сайту, они теряют свой смысл.

  Ответить  
 
 автор: dima2207   (10.10.2009 в 20:07)   письмо автору
 
   для: neadekvat   (10.10.2009 в 17:51)
 

все правельно , но мне от этого не легче !

  Ответить  
 
 автор: Гость   (10.10.2009 в 20:20)   письмо автору
 
   для: dima2207   (10.10.2009 в 17:05)
 

Я или не понял что вы имеете в виду или что.

При авторизации скриптом берете куки, при последуюбщих обращениях скрипта - просто отправляете с обращением куки в заголовке и все.

Вот мое старенькое решение на сокетах.


<?

function gen_headers ($host$path$data$cookie)
{
  
// Формируем headers
  
$headers  "POST $path HTTP/1.1\r\n";  
  
$headers .= "Host: $host\r\n";  
  
$headers .= "Accept: *\r\n"
  
$headers .= "Accept-Charset: *\r\n"
//  $headers .= "Accept-Encoding: deflate\r\n"; 
  
$headers .= "Accept-Language: ru\r\n"
  
$headers .= "Content-type: application/x-www-form-urlencoded\r\n"
  
$headers .= "Content-Length: ".strlen($data)."\r\n"

  if (!empty(
$cookie))
  {
    
$headers .= "Cookie: $cookie\r\n"
  }

  
$headers .= "Connection: Close\r\n\r\n"
  return 
$headers
}


////////////////////////////////////////////////////

function send_data_post ($data$cookie$hostname$path)
{
 
$line '';
 
 
$fp fsockopen($hostname80$errno$errstr30);  
  if (!
$fp
  {
    echo 
"$errstr ($errno)<br />\n";
  }  
  else 
  {
    
$headers gen_headers ($hostname$path$data$cookie);

    
fwrite($fp$headers.$data);  

    while (!
feof($fp)) 
    {  
      
$line .= fgets($fp1024);  
    }  
    
fclose($fp);  
  }

  return 
$line;
}



А, чего уж там. Вот даже пример авторизации в жж (может еще работает ,если форму не изменили =) ).


<?
function get_cookie ($headers)
{    
  if (
preg_match_all ("/set-cookie: (.*?;)/i"$headers$cookies))
  { 
    
$get_cook '';
    foreach (
$cookies[1] as $cook)
    {
      
$get_cook .= $cook.' ';
    }    
    return 
$get_cook;
    
  }
  else
  {
    return (
false);
  }
}

function 
get_cookie_lj ($login$pass)
{
  
$line send_data_post ('''''www.livejournal.com''/login.bml');

  
preg_match ('/name=\'chal\' class=\'lj_login_chal\' value=\'(.*)\' \/>/'$line$chal_arr);
  
$chal $chal_arr[1];

  
preg_match ('/name="lj_form_auth" value="(.*)"/'$line$lj_form_auth_arr);
  
$lj_form_auth $lj_form_auth_arr[1];

  
$data   "lj_form_auth=$lj_form_auth&chal=$chal&user=$login&password=$pass&\r\n\r\n"
  
$line   send_data_post ($data'''www.livejournal.com''/login.bml');
  
$cookie get_cookie ($line);

  return 
$cookie;
}



Потом просто переменную $cookie подставляете в send_data_post при следующих запросах.

  Ответить  
 
 автор: dima2207   (10.10.2009 в 23:29)   письмо автору
 
   для: Гость   (10.10.2009 в 20:20)
 

не плохое решение проблемы ! буду пробовать ! спасибо !
только в моем случае лучше наверное будет использовать курл функцию , потому как соединение идет по безопасному соединению.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования