Помогите разобраться с Curl
Новая тема Написать ответ
# Ср Ноя 08, 2006 10:44 pmDEN777 Зарег.: 08.11.2006 ; Сообщ.: 7Ответить с цитатой
Задача в следующем: нужно отправить данные методом POST на другой сайт, есть форма с отправкой на java script но меня это не совсем устраивает так как есть люди у которых он не включон ну и короче ряд причин....
Код:

<HTML>
   <body>
   <form id='send' name='send' action='' method='post'>
   <noscript>
   <br>
   <br>
   <h1 align='centre'>Processing your Transaction</h1>
   <h2 align='centre'>JavaScript is currently disabled or is not supported by your browser.</h2>
   <br>
   <h3 align='centre'>Please click on the Submit button to continue processing.</h3>
   <input type='submit' value='Submit'>
   </noscript>
   <input id='Version' type='hidden' name='Version' value='1.0.0'>
   <input id='AcqID' type='hidden' value='444444' name='AcqID'>
   <input id='CaptureFlag' type='hidden' value='A' name='CaptureFlag'>
</form>
<script language='javascript'>
CheckOut() ;
function CheckOut() {
window.name = 'send';
document.send.action = 'https://www.sait.ua/folder/RedirectLink.aspx'
document.send.submit();
}
</script>
</body>
</HTML>


Пытаюсь реализовать вышеизложенное при помощи Curl на PHP

Код:

$Version_form="1.0.0";         
$AcqID_form="444444";            
$CaptureFlag_form="A";
$data=array("Version"=>"$Version_form","AcqID"=>"$AcqID_form","CaptureFlag"=>"$CaptureFlag_form");

foreach($data as $name=>$value){$temp[]=urlencode($name)."=".urlencode($value);}
$PostData=implode("&", $temp);
$ch=curl_init("https://www.sait.ua/folder/RedirectLink.aspx");
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_NOBODY,0);
curl_setopt($ch,CURLOPT_VERBOSE, 1);
curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_REFERER,"https://мой_сайт/страница_отправления.php");
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch,CURLOPT_FAILONERROR, 1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$PostData);
curl_exec($ch);
curl_close($ch);



Но что то не работает помоему не ставяться куки от того сайта,
у него на первой странице авторизация потом он похоже ставит какойто кук и дальше идёт редирект.
я попадаю на ридерект но там полная ерунда адрес в броузере место того сайта мой и он начинает искать у меня рисунки на сайте только по совим папкам короче полная лабуда. и куки не ставит.
# Ср Ноя 08, 2006 10:46 pmВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
"Processing your Transaction"
https://www
^^^^ вот ответ.

А вообще-то это очень на фишинг похоже. Может забанить тебя для профилактики?
# Ср Ноя 08, 2006 10:49 pmDEN777 Зарег.: 08.11.2006 ; Сообщ.: 7Ответить с цитатой
какой фищинг? а делаю скрипт к интернет магазину.
# Ср Ноя 08, 2006 10:51 pmDEN777 Зарег.: 08.11.2006 ; Сообщ.: 7Ответить с цитатой
Вацлав писал(а):
"Processing your Transaction"
https://www
^^^^ вот ответ.

А вообще-то это очень на фишинг похоже. Может забанить тебя для профилактики?



и в чём же тут ответ? то что на jave пашет и так понятно просто не хочу чтоб люди у которых не включена java в IE или ещё где нить глазели на настройки передаваемые
# Ср Ноя 08, 2006 11:00 pmВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
Имхо ответ надо искать в HTTPS. SSL.
# Ср Ноя 08, 2006 11:43 pmCountZero Зарег.: 04.01.2006 ; Сообщ.: 541Ответить с цитатой
Цитата:
Но что то не работает помоему не ставяться куки от того сайта,
у него на первой странице авторизация потом он похоже ставит какойто кук и дальше идёт редирект.
я попадаю на ридерект но там полная ерунда адрес в броузере место того сайта мой и он начинает искать у меня рисунки на сайте только по совим папкам короче полная лабуда. и куки не ставит.

куки могут не ставиться в php4 во время редиректа, вот решение проблемы: http://ru2.php.net/manual/en/function.curl-setopt.php#70043
а насчет того, что в строке адреса адрес твоего сайта - все правильно, curl_exec просто скачивает страницу и, если CURLOPT_RETURNTRANSFER = 0, выводит ее в окно браузера. но пользователь остается на твоем сайте, его браузер не знает ничего ни о полученных куках, ни о редиректе - curl_exec исполнял не браузер пользователя (как было бы с яваскриптом), а скрипт на твоем сервере. если хочешь редиректить пользователя на левый сайт, то надо сделать
Код:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);

и потом уже анализировать полученный контент, ставить полученные от левого сайта сессионные куки пользователю в браузер и редиректить его на левый сайт при помощи header("Location: $site").
# Ср Ноя 08, 2006 11:49 pmDEN777 Зарег.: 08.11.2006 ; Сообщ.: 7Ответить с цитатой
CountZero спосибо за ответ, а можно немного поподробней про второй вариант?
дело в том что мне наверное всётаки надо его именно редиректить туда.
# Чт Ноя 09, 2006 12:02 amCountZero Зарег.: 04.01.2006 ; Сообщ.: 541Ответить с цитатой
[censored] ну вот тебе подробнее...
Код:
function read_header($ch, $string)
{
   global $location; #keep track of location/redirects
   global $cookiearr; #store cookies here
   global $ch;
       # ^overrides the function param $ch
       # this is okay because we need to
       # update the global $ch with
       # new cookies
 
   $length = strlen($string);
   if(!strncmp($string, "Location:", 9))
   { #keep track of last redirect
     $location = trim(substr($string, 9, -1));
   }
   if(!strncmp($string, "Set-Cookie:", 11))
   { #get the cookie
     $cookiestr = trim(substr($string, 11, -1));
     $cookie = explode(';', $cookiestr);
     $cookie = explode('=', $cookie[0]);
     $cookiename = trim(array_shift($cookie));
     $cookiearr[$cookiename] = trim(implode('=', $cookie));
   }
   $cookie = "";
   if(trim($string) == "")
   {  #execute only at end of header
     foreach ($cookiearr as $key=>$value)
     {
       $cookie .= "$key=$value; ";
     }
     curl_setopt($ch, CURLOPT_COOKIE, $cookie);
   }

   return $length;
}

$Version_form="1.0.0";         
$AcqID_form="444444";           
$CaptureFlag_form="A";
$data=array("Version"=>"$Version_form","AcqID"=>"$AcqID_form","CaptureFlag"=>"$CaptureFlag_form");

foreach($data as $name=>$value){$temp[]=urlencode($name)."=".urlencode($value);}
$PostData=implode("&", $temp);
$ch=curl_init("https://www.sait.ua/folder/RedirectLink.aspx");
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_NOBODY,0);
curl_setopt($ch,CURLOPT_VERBOSE, 1);
curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_REFERER,"https://мой_сайт/страница_отправления.php");
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch,CURLOPT_FAILONERROR, 1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$PostData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
curl_exec($ch);
foreach ($cookiearr as $key=>$value)
set_cookie($key, $value, time()+60*60*24*30, '/', левый_сайт);
header("Location: куда_тебе_нужно_редиректить");

# Чт Ноя 09, 2006 12:31 amDEN777 Зарег.: 08.11.2006 ; Сообщ.: 7Ответить с цитатой
что то не хочет работать ругается на моссив $cookiearr говорит что
Warning: Invalid argument supplied for foreach() in c:\www\order\test1.php on line 28
Warning: Invalid argument supplied for foreach() in c:\www\order\test1.php on line 82

а можно как нить без этих функцийпотому что помоему оно заносит в файл куки
curl_setopt($ch,CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR, 'cookies.txt');
# Чт Ноя 09, 2006 12:35 amDEN777 Зарег.: 08.11.2006 ; Сообщ.: 7Ответить с цитатой
он записывает в фал 'cookies.txt' следующую инфу:
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

имя сайта FALSE / FALSE 0 ASP.NET_SessionId qbdvnuemihv3gk5520zwqi55
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.