2013-05-27 4 views
0

Я пытаюсь войти в свою учетную запись Elance, используя cURL в PHP. Я успешно авторизуюсь в первой форме входа. Однако на следующей странице вы должны ответить на секретный вопрос. Я пытаюсь отправить ответ и отправить форму, однако, я не могу получить ее в ПОЧТУ и отправить форму. Я пытаюсь сделать это в файле .php. Требуется ли сделать 2-й POST в отдельном файле или может быть сделано в том же файле? Вот мой код:Сделать несколько POST с использованием PHP в cURL

<?php 

$username = 'Blah'; 
$password = 'BlahBlah'; 
$useragent = $_SERVER["HTTP_USER_AGENT"]; 
$postdata="lnm=$username&pwd=$password"; 
$postdata_2 = "challengeAnswer=Secret"; 

$ch = curl_init(); 

//Main Login 
curl_setopt ($ch, CURLOPT_URL,"https://www.elance.com/php/landing/main/login.php"); 
curl_setopt ($ch, CURLOPT_HEADER, true); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt ($ch, CURLOPT_REFERER, "https://www.elance.com/php/landing/main/login.php"); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec($ch); 



//Security Question 
curl_setopt($ch, CURLOPT_URL, "https://www.elance.com/php/trust/main/securityAudit.php?timestamp=1369701194&userid=4312662&saamode=NCR&hash=b5523cd532c401e374c8a06e6d2fbfa39ac82387&ncr_persisid=643029635&kmsi=&redirect=https%3A%2F%2Fwww.elance.com%2Fphp%2Fmyelance%2Fmain%2Findex.php%3Fredirect%3Dhttps%253A%252F%252Fwww.elance.com%252Fmyelance"); 
curl_setopt ($ch, CURLOPT_HEADER, true); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt ($ch, CURLOPT_REFERER, "https://www.elance.com/php/trust/main/securityAudit.php?timestamp=1369701194&userid=4312662&saamode=NCR&hash=b5523cd532c401e374c8a06e6d2fbfa39ac82387&ncr_persisid=643029635&kmsi=&redirect=https%3A%2F%2Fwww.elance.com%2Fphp%2Fmyelance%2Fmain%2Findex.php%3Fredirect%3Dhttps%253A%252F%252Fwww.elance.com%252Fmyelance"); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata_2); 
curl_setopt ($ch, CURLOPT_POST, 1); 

$result_2 = curl_exec($ch); 

echo $result_2; 

curl_close($ch); 

?> 

Я пробовал несколько разных способов, но ни один из них, похоже, не работает. Мне нужна помощь в создании второй команды POST.

+0

В чем проблема? Что такое '$ result_2'? – gkalpak

+0

Он показывает страницу вопроса безопасности, как и вторая часть формы, никогда не была отправлена. Он должен показывать страницу после успешного входа в систему. Он показывает этот URL-адрес: https://www.elance.com/php/trust/main/securityAudit.php?timestamp=1369701194&userid=4312662&saamode=NCR&hash=b5523cd532c401e374c8a06e6d2fbfa39ac82387&ncr_persisid=643029635&kmsi=&redirect=https%3A%2F%2Fwww.elance. ком% 2Fphp% 2Fmyelance% 2Fmain% 2Findex.php% 3Fredirect% 3Dhttps% 253A% 252F% 252Fwww.elance.com% 252Fmyelance» – three3

ответ

0

я могу увидеть временные метки и хэш на параметрах при второго Curl

curl_setopt($ch, CURLOPT_URL, "https://www.elance.com/php/trust/main/securityAudit.php?timestamp=1369701194&userid=4312662&saamode=NCR&hash=b5523cd532c401e374c8a06e6d2fbfa39ac82387&ncr_persisid=643029635&kmsi=&redirect=https%3A%2F%2Fwww.elance.com%2Fphp%2Fmyelance%2Fmain%2Findex.php%3Fredirect%3Dhttps%253A%252F%252Fwww.elance.com%252Fmyelance"); 

Это означает, что для каждого запроса вы пытаетесь от первого локона, новый уникальный URL создаются и что URL будет единственным один действительный, чтобы попытаться опубликовать ваш второй cURL. Вы не можете просто скопировать и вставить URL второго экрана «вопрос безопасности» на ваш второй cURL, потому что каждый раз будет иметь другую метку времени и/или хеширование.

Вы не можете просто скопировать URL-адрес с отметкой времени/хешем. Он будет отброшен с сервера этого сайта. вам нужно как-то получить этот URL-адрес на лету и использовать его во втором POST

Также может быть установлен «HTTP-референт».

0
if($curl = curl_init()) { 
    curl_setopt($curl, CURLOPT_URL, 'http://your-domain.com/file.php'); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, "text=test"); 
    $out = curl_exec($curl); 
    echo $out; 
    curl_close($curl); 
    } 

После чем вы можете получить текстовую переменную в http://your-domain.com/file.php на $ _POST [ 'текст'];

Смежные вопросы