Ошибка кода состояния 405 при запуске кода - PullRequest
0 голосов
/ 11 января 2020

Я работаю над своим первым и простым проектом, и это веб-сканер. Но страница, которую я пытаюсь почистить, не является простой страницей c HTML, вместо этого при проверке страницы есть куча запросов Get / Post.

Так что я сейчас работаю над Воспроизведение этих запросов с помощью HtmlUnit и Java.

original request

Я пытаюсь смоделировать этот запрос POST с помощью HtmlUnit и Java.

    public Page getCategoryKeywordRank(int catID) throws Exception{

    initBrowser();

    WebRequest webRequest = new WebRequest(new URL("https://datalab.naver.com/shoppingInsight/sCategory.naver"), HttpMethod.POST);

    webRequest.setAdditionalHeader("authority", "datalab.naver.com");
    webRequest.setAdditionalHeader("method", "POST");
    webRequest.setAdditionalHeader("path", "/shoppingInsight/getCategoryKeywordRank.naver");
    webRequest.setAdditionalHeader("scheme", "https");
    webRequest.setAdditionalHeader("accept", "*/*");
    webRequest.setAdditionalHeader("accept-encoding", "gzip, deflate, br");
    webRequest.setAdditionalHeader("accept-language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7");
    webRequest.setAdditionalHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
    webRequest.setAdditionalHeader("origin", "https://datalab.naver.com");
    webRequest.setAdditionalHeader("referer", "https://datalab.naver.com/shoppingInsight/sCategory.naver");
    webRequest.setAdditionalHeader("sec-fetch-mode", "cors");
    webRequest.setAdditionalHeader("sec-fetch-site", "same-origin");
    webRequest.setAdditionalHeader("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36");
    webRequest.setAdditionalHeader("x-requested-with", "XMLHttpRequest");

    webRequest.setRequestBody("cid=" + catID +
            "&timeUnit=date" +
            "&startDate=2019-12-10" +
            "&endDate=2020-01-10" +
            "&age=" +
            "&gender=" +
            "&device=" +
            "&page=3" +
            "&count=20");

    Page page = browser.getPage(webRequest);

    return page;
}

Итак, я попытался установить все заголовки и тело. Но когда я запускаю этот код, я получаю: error code

Я почти ничего не знаю о том, как работает сеть / браузер, поэтому я сейчас очень растерялся.

Я не знаю, неверна ли вся моя концепция или это просто мой код.

Если бы мне пришлось искать другой способ сделать это, что бы это было?

1 Ответ

0 голосов
/ 12 января 2020

Сегодняшние веб-страницы более или менее похожи - куча волшебников c (в основном на основе js) делается в фоновом режиме, чтобы сделать пользователей счастливыми (по крайней мере, дизайнеры страниц в это верят).

Идея HtmlUnit состоит в том, чтобы моделировать полноценный веб-браузер, но заменять взаимодействие пользователя с API. Обычно вы не создаете весь материал запроса самостоятельно. См. Первые два примера на странице http://htmlunit.sourceforge.net/gettingStarted.html, чтобы получить представление.

Если вы хотите сравнить запросы, выполненные HtmlUnit, с запросами реальных браузеров, я предлагаю использовать инструмент наподобие веб-прокси charles (https://www.charlesproxy.com/) для индивидуального захвата траффиков c и их сравнения.

Если вы считаете, что HtmlUnit отличается от реального браузера, откройте проблему в Github.

...