У меня есть задание, которое требует от меня перебора результатов поиска на веб-сайте, представляющих собой ссылки на журналы, для сбора ссылки на каждый журнал и других метаданных (авторов, даты и т. Д.) И их вывода в a. TXT-файл, использующий по крайней мере Java и Apache HTTPClient, но без веб-сканеров Вот сайт: https://www.cochranelibrary.com/cdsr/reviews/topics. Я должен выбрать любую из показанных категорий и собрать вышеупомянутые данные для каждой из ссылок журнала в этой категории.
Ниже приведен фрагмент кода, который я нашел в Интернете для сбора сущности HTTP и тела ответа через Apache HTTPClient. Программа, с которой я сталкиваюсь, использует простой URL-адрес, такой как google.com, работает нормально и отображает исходный код страницы для последующего анализа. Тем не менее, страница, которую мне нужно использовать, полна волшебства JavaScript и не сотрудничает. Каждая страница результатов поиска заканчивается конечной точкой "/ search". С помощью инструментов веб-разработчика моего браузера мне удалось найти прямую ссылку на
текущую страницу результатов я просматриваю:
https://www.cochranelibrary.com/en/search?p_p_id=scolarissearchresultsportlet_WAR_scolarissearchresults&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_scolarissearchresultsportlet_WAR_scolarissearchresults_displayText=Allergy+%26+intolerance&_scolarissearchresultsportlet_WAR_scolarissearchresults_searchText=Allergy+%26+intolerance&_scolarissearchresultsportlet_WAR_scolarissearchresults_searchType=basic&_scolarissearchresultsportlet_WAR_scolarissearchresults_facetQueryField=topic_id&_scolarissearchresultsportlet_WAR_scolarissearchresults_searchBy=13&_scolarissearchresultsportlet_WAR_scolarissearchresults_facetDisplayName=Allergy+%26+intolerance&_scolarissearchresultsportlet_WAR_scolarissearchresults_facetQueryTerm=z1506030924307755598196034641807&_scolarissearchresultsportlet_WAR_scolarissearchresults_facetCategory=Topics
Однако, при попытке использовать это возвращает ошибку 419, которая, по-видимому, является некоторой проблемой несанкционированного доступа / токена. Так что на данный момент это моя основная проблема, я просто не могу «импортировать» результаты поиска по категориям, чтобы даже попытаться выполнить итерацию для сбора необходимых данных.
public static void main(String[] args) throws IOException
{
String url = "http://www.google.com";
CloseableHttpClient httpclient = HttpClients.createDefault();
try
{
HttpGet httpget = new HttpGet(url);
httpget.addHeader("User-Agent",USER_AGENT);
System.out.println("Executing request " + httpget.getRequestLine());
ResponseHandler<String> responseHandler = new ResponseHandler<String>()
{
public String handleResponse(final HttpResponse response) throws IOException
{
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300)
{
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
}
else
{ throw new ClientProtocolException("Unexpected response status: " + status); }
}
};
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
}
finally
{ httpclient.close(); }
}
UPDATE
Поэтому я немного консолидировал код после просмотра документов Apache HTTPClient, чтобы было проще работать и тестировать:
public class App
{
public static void main(String[] args) throws URISyntaxException
{
// Builds the URI
URI uri = new URIBuilder()
.setScheme("https")
.setHost("www.cochranelibrary.com")
.setPath("/")
.build();
// Uses Fluent API to execute GET request with uri
try
{ System.out.println(Request.Get(uri).execute().returnContent().asString()); }
catch (IOException e)
{ e.printStackTrace(); }
}
}
Однако этот конкретный домен продолжает вызывать у меня проблемы. Просто попытка получить с www.cochranelibrary.com возвращает ошибку 419. Я подумал, что это может быть что-то с протоколом HTTPS, но тестирование на https://www.httpvshttps.com возвращает отлично. Я заблудился относительно того, почему этот конкретный домен упрямый.