|
|
|
| всем привет !
собственно говоря проблема такого рода .
кто знает как можно отправить на сервер методом пост переменные и при получении ответа записывать куки что передает сервер . | |
|
|
|
|
|
|
|
для: 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', $data, time() + 60*60);//Установка куки на час
?>
|
| |
|
|
|
|
|
|
|
для: 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($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (is_array($post)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, join('&', $_post));
}
if (is_array($headers)) { // если заданы какие-то заголовки для браузера
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
if (!empty($uagent)) { // если задан UserAgent
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
}
$result = curl_exec($ch);
if (curl_errno($ch) != 0 && empty($result)) {
$result = false;
}
curl_close($ch);
return $result;
}
?>
|
| |
|
|
|
|
|
|
|
для: dima2207
(10.10.2009 в 03:14)
| | Возможно выходом из ситуации будет получении содержимого при помощи функции
http://ee.php.net/manual/en/function.curl-multi-getcontent.php, дальнейшая обработка возвращённых заголовков и установка куки. | |
|
|
|
|
|
|
|
для: dios™
(10.10.2009 в 11:43)
| | не , нето , дело в том что обработка полученных данных происходит на другом сервере . и поставить куки с именем домена что передал данные не получится! | |
|
|
|
|
|
|
|
для: dima2207
(10.10.2009 в 15:10)
| | Так загвоздка в том, что бы поставить куки с именем домена, который их передал? Или в том, что бы "украсть" куки, которые пытается ставить другой сервер? | |
|
|
|
|
|
|
|
для: dios™
(10.10.2009 в 15:16)
| | никто красть не собирается , просто при авторизации на одном сайте ставятся куки ! нельзя упускать из виду этот факт , а так как авторизацию производит скрипт ане браузер , то я испытываю некоторые проблемы с установкой куки ! | |
|
|
|
|
|
|
|
для: dima2207
(10.10.2009 в 17:05)
| | Ну допустим запускаете вы скрипт на test1.ru, который делает запрос к test2.ru. Test2.ru возвращет команду установить куки, но сделать то это должен будет test1.ru на вашем браузере, не так ли? Но test.1ru для test2.ru кукисы устанавливать не имеет права. Иначе, если любые кукисы будут доступны любому сайту, они теряют свой смысл. | |
|
|
|
|
|
|
|
для: neadekvat
(10.10.2009 в 17:51)
| | все правельно , но мне от этого не легче ! | |
|
|
|
|
|
|
|
для: 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($hostname, 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$headers = gen_headers ($hostname, $path, $data, $cookie);
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
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 при следующих запросах. | |
|
|
|
|
|
|
|
для: Гость
(10.10.2009 в 20:20)
| | не плохое решение проблемы ! буду пробовать ! спасибо !
только в моем случае лучше наверное будет использовать курл функцию , потому как соединение идет по безопасному соединению. | |
|
|
|