使用Spring和应用引擎任务队列处理非英文URL



我有这个问题,我需要排队与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包含?的阿拉伯字符。因为它一直在重新调度。

字符串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转换为阿拉伯语吗?

必须对参数进行url编码。查看这个问题:查询字符串参数的Java URL编码

最新更新