php внешний сайт, затем войдите на другую страницу - PullRequest
0 голосов
/ 30 мая 2018

Мне нужно войти на другой сайт с помощью php, а затем получить содержимое с другой страницы этого сайта, потому что после входа на домашнюю страницу мне нужна страница клиентов.Я пытался с file_get_contents и curl, но последний, как известно, лучше здесь код с php curl:

$username='username';
$password='password';
$cookie="/home/cookie.txt"; 

$url = 'http://the-site.com/';
$postdata = "?&username=$username&password=$password&op=login&rUrl=? 
op=customers";

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 


$result = curl_exec ($ch); 

echo $result;  

curl_close($ch); 

op и rUrl являются именами скрытыхтег ввода.Если я добавлю $ url + $ postdata в адресную строку браузера, он перейдет на нужную страницу, но через код он не будет работать должным образом, он останется на странице входа без входа.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Параметр:

curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 

работает, потому что:

CURLOPT_FOLLOWLOCATION TRUE, чтобы следовать за любым заголовком "Location:", который сервер отправляет как часть заголовка HTTP (обратите внимание на этоявляется рекурсивным, PHP будет следовать столько же заголовков «Location:», сколько отправлено, если только не установлено CURLOPT_MAXREDIRS).

После входа он будет перенаправлен на страницу, указанную в URL.

0 голосов
/ 30 мая 2018

Ваш $postdata представляется недействительным - у него не должно быть этого ведущего ?&.Кроме того, op появляется дважды, второй раз как op=customers после другого ?:

$postdata = "?&username=$username&password=$password&op=login&rUrl=? op=customers";

http_build_query рекомендуется, чтобы вы генерировалиточная строка запроса в кодировке URL, например:

$postdata = [
    'username' => $username,
    'password' => $password,
    'op' => 'login',
    'rUrl' => 'customers',
];

echo '$postdata: ' . http_build_query($postdata);
exit;
...