2013-05-20 36 views
1

我有这个问题,我需要排队与TaskQueue页面链接非英文网址:处理与Spring和App Engine的任务队列

 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不过是outputed通过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这里为阿拉伯语或不?

回答

1

必须Url-encode的参数。看到这个问题:Java URL encoding of query string parameters

+0

好吧,我明白了,所以当我URL编码字符串'href',那么这是否意味着我的爬行方法将不能被用户从浏览器直接调用,因为它会做URL解码获取实际的网址? – xybrek

+0

另外,从你所说的话来看,我似乎并没有在上面的代码中的for循环中对String'href'进行任何形式的转换,然后才传递到队列中。是对的吗? – xybrek

相关问题