在URL中使用带有非法字符的HttpGet

时间:2010-05-27 17:42:38

标签: java http httpwebrequest httpclient http-get

我正在尝试使用DefaultHttpClientHttpGet向网络服务发出请求。遗憾的是,Web服务URL包含非法字符,例如{(例如:domain.com/service/{username})。很明显,Web服务命名不是很好,但我无法改变它。

当我HttpGet(url)时,我知道我在网址中有一个非法字符(即{和})。如果我在此之前对URL进行编码,则没有错误,但请求会转到另一个没有任何内容的URL。

网址虽然有非法字符,但可以在浏览器中使用,但HttpGet实现不允许我使用它。我应该做什么或使用什么来避免这个问题?

3 个答案:

答案 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;
}