1

我有这个问题,我需要将页面链接排队TaskQueue

        Queue queue = QueueFactory.getDefaultQueue();
        for (String href : hrefs){
            href = baseUrl + href;
            pageLinks = pageLinks + "\n" + href;
            queue.add(TaskOptions.Builder
                .withUrl("/crawler")
                .param("url", href));
          l("Added to queue url=["+href+"]");               
        }

这里的问题是,我认为传递到队列中的 URL 包含?阿拉伯字符的 's。因为它不断地重新安排。

然而,字符串pageLinks是通过 Spring MVC 在浏览器中输出的,我可以正确地看到正在显示的阿拉伯字符。所以我很漂亮链接还可以。

如果我在浏览器上复制其中一个链接输出,并将其粘贴到浏览器 URL,它就可以正常工作。所以我很确定队列不断重新安排的原因是因为它获取了错误的 URL。

我在这里能错过什么?String href在将它传递到队列之前我需要转换它吗?

抓取服务如下所示:

@RequestMapping(method = RequestMethod.GET, value = "/crawl",
produces = "application/json; charset=iso-8859-6")
public @ResponseBody String crawl(HttpServletRequest req, HttpServletResponse res,
            @RequestParam(value="url", required = false) String url) {
        l("Processs url:" + url);
}

我还需要将此处的@QueryParam字符串转换url为阿拉伯语吗?

4

1 回答 1

1

您必须对参数进行 URL 编码。看到这个问题:Java URL encoding of query string parameters

于 2013-05-20T09:21:36.957 回答