Как войти в защищенное представление модуля в suitecrm, используя php curl?

С уважением

Я пытаюсь измерить время загрузки представления модуля в suitecrm. я ожидаю смоделировать посещение определенного просмотра n пользователями и измерить время их загрузки.

Поток, который я намереваюсь реализовать, состоит в том, чтобы получить доступ к сайту, предоставляющему имя пользователя и пароль, делая вышеописанное, сохраняя сеанс и получая доступ к представлению модуля в n случаях, заключая эти взаимодействия в микротайм и получая время, которое занимает этот процесс.

Первая проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что при использовании PHP curl не удается войти на сервер в рабочей среде, защищенной с помощью ssl.

Это сценарий, который я пытаюсь

<?php

$start = microtime(true);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, 'https://site/index.php?action=Login&module=Users');
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "username=user&password=pass");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie-name');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$answer = curl_exec($curl);

if (curl_error($curl)) {
    echo curl_error($curl);
}

//another request preserving the session

curl_setopt($curl, CURLOPT_URL, 'https://site/index.php?module=Opportunities&offset=1&stamp=1535132707073610600&return_module=Opportunities&action=EditView&record=90eef8e0-e46d-85cc-cef8-5b7e96bd1111');
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, "");

$answer = curl_exec($curl);

if (curl_error($curl)) {
    echo curl_error($curl);
}

$time_elapsed_secs = microtime(true) - $start;

echo round($time_elapsed_secs, 2);

Моя проблема в том, что я не могу получить доступ к сайту, и, следовательно, рассчитанное время - это только время, затраченное на загрузку вида входа в систему

Спасибо заранее, если вам нужна дополнительная информация, пожалуйста, дайте мне знать, чтобы облегчить ее

1 ответ

После того, как попробовал и попытался успешно войти на сайт suitecrm, я делюсь решением на тот случай, если кому-то это нужно

<?php

$start = microtime(true);

$url = 'https://domain/index.php';
$authenticateFields = [
    'action'            => 'Authenticate',
    'cant_login'        => '',
    'Login'             => 'Iniciar+Sesión',
    'login_action'      => '',
    'login_language'    => 'es_ES',
    'login_mobile'      => '',
    'login_module'      => '',
    'login_oauth_token' => '',
    'login_record'      => '',
    'login_token'       => '',
    'module'            => 'Users',
    'return_action'     => 'Login',
    'return_module'     => 'Users',
    'user_name'         => 'your_username',
    'username_password' => 'your_password',
];
$editOpportunityFields = [
    'action'            => 'EditView',
    'module'            => 'Opportunities',
    'offset'            => 1,
    'record'            => '93dbe6a2-fd18-7965-45af-5b72fc8afb96',
    'return_module'     => 'Opportunities',
    'stamp'             => 1535401065081436600,
];
$authenticateFields = http_build_query($authenticateFields);
$editOpportunityFields = http_build_query($editOpportunityFields);
$userAgent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $authenticateFields);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_VERBOSE, true);

$response = curl_exec($curl);

curl_setopt($curl, CURLOPT_URL, $url . "?{$editOpportunityFields}");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_POST, false);

$response = curl_exec($curl);

$headers = curl_getinfo($curl, CURLINFO_HEADER_OUT);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$info = curl_getinfo($curl);

print_r($response);
print_r($headers);
print_r($code);
echo "\n";

$end = microtime(true);
$timeElapsed = $end - $start;

print_r($timeElapsed);

curl_close($curl);

В этом примере я получаю вход в систему, и после успешного входа в систему я запрашиваю представление редактирования возможности и, наконец, распечатываю информацию в передаче. В этом случае возвращаются содержимое, заголовки, http-код и время загрузки.

Моя проблема не состояла в том, чтобы передать параметры, ожидаемые в действии входа в систему. После проверки формы и определения серии входных данных, которые передаются при отправке формы, а также проверки параметров, отправленных во время аутентификации, я получил поля, которые suitecrm требует для входа в систему

Что касается измерения времени загрузки, то благодаря ответу в stackru мне удалось определить, что невозможно получить реальные данные с помощью phpcurl, для объяснения, пожалуйста, прочитайте ответ.

Я ценю любые комментарии, чтобы помочь любому, кто нуждается в уважении в этом сценарии

Другие вопросы по тегам