На самом деле я видел несколько подобных случаев в Stack Overflow, но, похоже, в моем PHP-коде есть ошибки, и я не могу правильно отобразить страницу. Страница, которую я пытаюсь получить, является ресурсом от Pentaho BI. (Версия 7.1.0.0.12). Я перепробовал много-много вещей, но ничего не работает.
Чтобы получить Cookie, я выполняю HTTP POST от CURL PHP. Это хорошо работает, я могу получить печенье из Пентахо.
Пожалуйста, проверьте код ниже;
$post_data['username'] = "suzy";
$post_data['password'] = "password";
foreach ($post_data as $key => $value) {
$post_items[] = $key . '=' . $value;
}
$post_string = implode('&', $post_items);
$curl_connection = curl_init('http://10.10.10.215:8080/pentaho/j_spring_security_check');
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 3000 * 10);
curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, 'j_username=suzy&j_password=password');
curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$result = curl_exec($curl_connection);
$sessionID = explode("=", $url);
$cookie = $sessionID[1];
Итак, переменная $ cookie содержит SESSIONID, который я должен использовать для доступа к ресурсу из Пентахо.
И затем я выполняю HTTP GET от CURL PHP, чтобы получить страницу (ресурс) из Пентахо.
Это та часть, которая не работает. На самом деле я вижу, что PHP «подключен» к Pentaho по URL и ранее запрошенному файлу cookie, а также вызов возвращает всю страницу, но когда я отображаю страницу в браузере, он выдает много ошибок, когда я сказал раньше (JS, CSS ошибки и многое другое).
Пожалуйста, проверьте код ниже;
$url = "http://10.10.10.215:8080/pentaho/api/repos/%3Apublic%3ASteel%20Wheels%3ADashboards%3ACTools_dashboard.wcdf/generatedContent";
$ch = curl_init();
$headers[] = 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap';
$headers[] = 'Connection: Keep-Alive';
$headers[] = 'Cache-Control: no-cache';
$headers[] = 'Pragma: no-cache';
$headers[] = 'Transfer-Encoding: chunked';
$headers[] = 'Accept-Language: nl-NL,nl;q=0.8,en_US;q=0.6,en;q=0.4';
$headers[] = 'Accept-Encoding: gzip, deflate';
$headers[] = 'Accept: text/plain,* /*;q=0.01';
$headers[] = 'Content-Type: text/html; charset=utf-8';
$headers[] = 'Cookie: JSESSIONID='.$sessionID[1];
$user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, '');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
echo $response;die();
Я хотел бы уточнить, я могу получить страницу, но со всеми теми ошибками, которые я упомянул.
Я также пытался вставить этот контент в IFRAME, но не смог этого сделать. Есть ли способ сделать это?
Вся информация, которую вы можете добавить, приветствуется! Если у вас есть код, который я могу проверить, и многое другое.
Задача ещё не решена.
Других решений пока нет …