我正在尝试使用DefaultHttpClient
和HttpGet
向网络服务发出请求。遗憾的是,Web服务URL包含非法字符,例如{(例如:domain.com/service/{username})。很明显,Web服务命名不是很好,但我无法改变它。
当我HttpGet(url)
时,我知道我在网址中有一个非法字符(即{和})。如果我在此之前对URL进行编码,则没有错误,但请求会转到另一个没有任何内容的URL。
网址虽然有非法字符,但可以在浏览器中使用,但HttpGet
实现不允许我使用它。我应该做什么或使用什么来避免这个问题?
答案 0 :(得分:10)
http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html
具体做法是:
String safeUrl = URLEncoder.encode("domain.com/service/{username}", "UTF-8");
答案 1 :(得分:1)
这个问题已经过时了,但它帮助了我,我只是想为可能来的人添加,我已经通过Mike的回复修改了我的应用程序中的这个问题。
String safeUrl = "domain.com/service/" + URLEncoder.encode("{username}", "UTF-8");
我发现编码只是相关的部分工作,尝试编码整个网址导致我的错误。
答案 2 :(得分:1)
我们不应该将URLEncoder.encode用于网址的地址部分,因为它错误地将您的http://domain.com/ {用户名}更改为http%3A%2F%2Fdomain.com%2 {用户名},您应该知道它会用'+'替换所有空格,用“%20”替换它们对我来说更好。
此功能仅对您网址的最后一部分进行编码,即{username}或文件名或任何可能包含非法字符的内容。
String safeUrl(String inUrl)
{
int fileInd = inUrl.lastIndexOf('/') + 1;
String addr = inUrl.substring(0, fileInd);
String fileName = inUrl.substring(fileInd);
String outUrl=null;
try {
outUrl = addr + URLEncoder.encode(fileName, "UTF-8");
outUrl = outUrl.replace("+", "%20");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return outUrl;
}