Ответ Narcolessico сработал для меня, но мне потребовалось некоторое время, чтобы полностью понять подход. Добавлю к ответу, указанному выше.
ПРИМЕЧАНИЕ. Я использую Java (Apache HttpClient) для выполнения HTTP-запросов GET к серверу Confluence.
- Я использовал Chrome для перехода на страницу Confluence, которую хотел экспортировать в PDF. Я развернул меню инструментов, щелкнул правой кнопкой мыши «Экспорт в PDF», а затем щелкнул «Проверить». Это покажет базовый элемент HTML для этого пункта меню, содержащий ссылку, используемую для запуска операции экспорта PDF.
проверьте элемент, чтобы найти URL
- Проверка элементов выявила следующую относительную ссылку на действие экспорта PDF.
исходный код html
- Из Java, если вы выполняете HTTP GET на https://your-confluence-server-hostname/the-relative-link-from-step-2, вам нужно будет отключить обработку перенаправления. Вот где ответ Narcolessico смутил меня, поскольку я получал разные ответы от cURL и Java. Когда я понял, что операция cURL возвращает ответ 302 и что клиент Apache Http автоматически обрабатывает его, я нашел способ отключить эту обработку автоматического перенаправления, чтобы я мог захватывать информацию заголовка Location.
Код для отключения обработки автоматического перенаправления выглядит следующим образом.
final HttpClient client = HttpClientBuilder
.create()
.setSSLContext(sslContext)
.disableRedirectHandling() // disable the auto handling here
.build();
final String urlToGetLocation = "https://<your-confluence-server-hostname><the-relative-link-from-step-2>"
final HttpGet request = new HttpGet(urlToGetLocation);
// You'll need to provide Basic Auth credentials. This is a base-64 encoded
// username:password string, else the Location header returned will be a
// redirect to the login page.
request.setHeader(HttpHeaders.AUTHORIZATION, authorizationHeaderValue);
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
final HttpResponse response = client.execute(request);
final HttpEntity payload = response.getEntity();
ПРИМЕЧАНИЕ. Я также отменяю контекст SSL, чтобы ничего не делать. Это еще одна проблема, с которой вам, возможно, придется бороться, если Confluence использует HTTP.
Кстати, если вы выполните CURL GET для указанного выше URL-адреса, вы получите следующий ответ.
отредактированный вывод cURL
Вышеупомянутый запрос GET и результирующий ответ 302 покажут расположение PDF-документа, который вы затем можете загрузить. Заголовки ответа 302 будут содержать следующее.
final Header[] headers = response.getHeaders(HttpHeaders.LOCATION);
final String location = headers[0].getValue();
Это URL-адрес следующего вида.
/download/temp/pdfexport-20190924-240919-0526-189/a-filename-for-pdf.pdf?contentType=application/pdf
- Заголовок Location выше содержит URL-адрес экспортированного / сгенерированного PDF-файла. Затем вы можете выполнить последующий HTTP-запрос GET на этот URL-адрес, чтобы загрузить сгенерированный документ PDF. если вы используете клиент Apache Http, вам необходимо использовать обработку автоматического перенаправления для этого последующего запроса GET.
Вся заслуга Narcolessico за этот ответ. Я просто хотел добавить детали, которые мне нужно было разобрать, чтобы заставить его работать с Java.
person
user12113182
schedule
24.09.2019