fsockopen() + cookie

Benjamin

Guest
fsockopen() + cookie

Вот переделал функцию для запрашивания документов:
PHP:
 function fsock( $url, $data = "", $method = "get", $cookies = "") {
  $arr = parse_url($url);
  $nn = "\r\n";
  $host = $arr["host"];
  $ref = $arr["scheme"]."//$host";
  $path = $arr["path"];
  $request = strtoupper($method)." $path HTTP/1.0".$nn.
             "Referer: $ref".$nn.
             ( $cookies ? "Cookie: ".$cookies.$nn : "").
             #"Connection: Keep-Alive".$nn.
             "Content-Type: application/x-www-form-urlencoded".$nn.
             "Content-Length: ".strlen($data).$nn.
             "Host: $host".$nn.
             "Accept: */*".$nn.
             "Accept-Encoding: gzip, deflate".$nn.
             "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".$nn."".$nn.
             $data;
  //echo nl2br($request);
  $fp = fsockopen( $host, 80, &$errno, &$errstr, 30);
  if(!$fp) { print "$errstr ($errno)<br>\n"; exit; }
  fputs( $fp, $request);
  while(  !feof($fp)  ){
   @$reply .= fgets( $fp );
  }
  fclose($fp);
  return $reply;
 }
А вот функция для выдирания куки:
PHP:
 function get_cookie( $header ) {
  $cookie = "";
  $arr = split( "\r\n", $header);
  $j = count($arr);
  for( $i=0; $i < ($j-1); $i++) {
   if(  ereg("^Set-Cookie:",$arr[$i])  ) {
    list($cv) = split( ";", $arr[$i]);
    list($trash, $cv) = split( ":", $cv);
    list($cname, $cv) = split( "=", $cv, 2);
    $cookie .= "$cname=".urlencode($cv)."; ";
   }
  }
  return $cookie;
 }
Но когда запрашиваю документ учитывая полученные куки, то в результате мне приходит ответ: HTTP/1.1 302 Moved Temporarily. И в заголовке приходит Location: .... пересылка на стрницу авторизации. Которую я прошел ранее передав параметры и получил взамен куки.

В чем проблема?
 

Voxus

founder (Старожил PHPCluba)
покажи, что передаешь после проставления куки
 

Benjamin

Guest
Автор оригинала: Voxus
покажи, что передаешь после проставления куки
PHP:
 $data = fsock( "http://ekeystone.com/keystone/verifpwd.asp", "Username=bla&Password=mla", "get", "");
 $cookie = get_cookie( $data );
 $data = fsock( "http://ekeystone.com/keystone/common/techlines.asp", "", "get", $cookie);
 echo $data;
Ответ: HTTP/1.1 302 Moved Temporarily Server: Microsoft-IIS/4.0 Date: Thu, 12 Sep 2002 16:25:22 GMT P3P: CP="ALL DSP CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT" Connection: close Location: /keystone/FormsLogin.asp?/keystone/common/techlines.asp
 

sokov

Guest
Пробовал смотреть, что за куки там выдрались?
 

Benjamin

Guest
Да, выдираются нормальные (правильные). Они же у меня на диске и сохряняются, когда я в IE смотрю...

Самое интересное, что данное сообщение - ВОПЛЬ ОТЧАЯНИЯ. Т.к. когда я тестировал на локальном сервере чтения, выдирания и последующей посылки куки - все работает. А на нужном мне серваке - нет.

Можно дальше не отвечать. Спасибо всем кто откликнулся. Буду продолжать ***ся сам...
 
Сверху