我有这个问题,我需要排队与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编码