【问题标题】:Getting a status code 405 error when I run my code运行代码时出现状态码 405 错误
【发布时间】:2020-01-11 19:43:00
【问题描述】:

我正在开发我的第一个简单项目,它是一个网络爬虫。但是我试图抓取的页面不是一个简单的静态 HTML 页面,而是在我检查页面时有一堆 Get/Post 请求。

所以我目前正在使用 HtmlUnit 和 Java 重现这些请求。

我正在尝试使用 HtmlUnit 和 Java 模拟这个 POST 请求。

    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;
}

所以我尝试设置所有的标题和正文。但是当我运行这段代码时,我得到:

我对网络/浏览器的工作原理几乎一无所知,所以我现在很困惑。

我不知道我的整个概念是错的还是只是我的代码。

如果我必须找到另一种方法,那会是什么?

【问题讨论】:

    标签: java web-scraping xmlhttprequest web-crawler htmlunit


    【解决方案1】:

    今天的网页或多或少都是这样——在后台做了一堆魔法(主要基于js)来让用户开心(至少页面设计者是相信这一点的)。

    HtmlUnit 的想法是模拟一个完整的网络浏览器,但用 api 代替用户交互。通常,您不会自己创建所有请求内容。请参阅页面http://htmlunit.sourceforge.net/gettingStarted.html 上的前两个示例以了解想法。

    如果您想将 HtmlUnit 完成的请求与真实浏览器完成的请求进行比较,我建议使用 charles web proxy (https://www.charlesproxy.com/) 等工具单独捕获流量并进行比较。

    如果您认为 HtmlUnit 与真正的浏览器不一样,请在 Github 上打开一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多