|
|
|
Задача в следующем: нужно отправить данные методом 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);
|
Но что то не работает помоему не ставяться куки от того сайта,
у него на первой странице авторизация потом он похоже ставит какойто кук и дальше идёт редирект.
я попадаю на ридерект но там полная ерунда адрес в броузере место того сайта мой и он начинает искать у меня рисунки на сайте только по совим папкам короче полная лабуда. и куки не ставит. |
|
|
|
|
|
"Processing your Transaction"
https://www
^^^^ вот ответ.
А вообще-то это очень на фишинг похоже. Может забанить тебя для профилактики? |
|
|
|
|
|
какой фищинг? а делаю скрипт к интернет магазину. |
|
|
|
|
|
Вацлав писал(а): |
"Processing your Transaction"
https://www
^^^^ вот ответ.
А вообще-то это очень на фишинг похоже. Может забанить тебя для профилактики?
|
и в чём же тут ответ? то что на jave пашет и так понятно просто не хочу чтоб люди у которых не включена java в IE или ещё где нить глазели на настройки передаваемые |
|
|
|
|
|
Имхо ответ надо искать в HTTPS. SSL. |
|
|
|
|
|
Цитата: |
Но что то не работает помоему не ставяться куки от того сайта,
у него на первой странице авторизация потом он похоже ставит какойто кук и дальше идёт редирект.
я попадаю на ридерект но там полная ерунда адрес в броузере место того сайта мой и он начинает искать у меня рисунки на сайте только по совим папкам короче полная лабуда. и куки не ставит.
|
куки могут не ставиться в 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"). |
|
|
|
|
|
CountZero спосибо за ответ, а можно немного поподробней про второй вариант?
дело в том что мне наверное всётаки надо его именно редиректить туда. |
|
|
|
|
|
[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: куда_тебе_нужно_редиректить");
|
|
|
|
|
|
|
что то не хочет работать ругается на моссив $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'); |
|
|
|
|
|
он записывает в фал '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 |
|
|
|
|
|
|
|