PHP cURL ничего не возвращая - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь получить информацию с внешнего сайта, который требует входа в систему. Я использую свой локальный хост. Похоже, что я зарегистрировался и установил cook ie ok в cook ie .txt в моем домашнем каталоге, но я получил пустой результат. Я рецензировал эти вопросы в деталях, но не могу заставить его работать. Я совершенно новичок в PHP. Вот мой код:

третье лицо HTML форма входа

<form method="post">
    <input type="hidden" name="t" value="/index.php?"/>
    <input type="hidden" name="count" value="1" />
    <input type="text" id="username" name="username" value="" size="10" maxlength="10" required/>
    <input type="password" id="password" name="password" value="" size="10" maxlength="10" required/> 
    <input type=submit name=submit value=Login />
    Keep me logged in <input type="checkbox" id="keep" name="keep" checked/>
</form>

PHP

define('USERNAME', 'user');
define('PASSWORD', 'password1');
define('USER_AGENT', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36');
define('COOKIE_FILE', $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
define('LOGIN_FORM_URL', 'http://www.example.com/sub/login.php?t=%2Findex.php%3f');
define('LOGIN_ACTION_URL', 'http://example.com/sub/index.php?t=%2Findex.php%3f'); //Same as LOGIN_FORM_URL

$postValues = array(
    'username' => USERNAME,
    'password' => PASSWORD,
    'submit' => 'Login',
    'count' => '1',
    't' => '/index.php?',
    'keep' => 'on'
);


$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, LOGIN_ACTION_URL);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues));
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt ($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); 
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);

//Just to see what is going on
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_REFERER, LOGIN_FORM_URL);

//There is one header redirect so this is needed
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

echo curl_exec($curl);

//Checking for errors. None returned.
if(curl_errno($curl)){
    throw new Exception(curl_error($curl));
}

//We should be logged in by now. So I try to access a password protected page
curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/protected');


curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt ($curl, CURLOPT_COOKIEFILE, COOKIE_FILE);
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);


//Execute the GET request and print out the result.
$content = curl_exec($curl);

curl_close($curl);
echo $content;

Я ожидаю увидеть содержимое со страницы, защищенной паролем, но Я вижу только информацию заголовка HTTP (как я назвал CURLOPT_HEADER). Как было предложено в другом вопросе, я проверил переменные записей на стороннем сайте в сетевом мониторе моего браузера, и все они верны.

Я чувствую, что это как-то связано с перенаправлением, но я не знаю что.

РЕДАКТИРОВАТЬ : После долгой игры я думаю, что изолировал проблему с поваром PHPSESSID ie. Я вошел в систему вручную, скопировал значение PHPSESSID и передал его на мой сайт (либо путем создания заголовка вручную с помощью CURLOPT_HTTPHEADER, либо путем редактирования файла cook ie, созданного CURLOPT_COOKIEJAR). Я смог войти таким образом. Однако, когда мой сайт входит в систему и создает свой собственный другой PHPSESSID, это не работает по какой-то причине. Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...