【问题标题】:Encoded URL and java.lang.IllegalArgumentException编码 URL 和 java.lang.IllegalArgumentException
【发布时间】:2015-02-05 10:07:58
【问题描述】:

我编码了一些 URL 参数并且 URL 变得正确,但我仍然得到java.lang.IllegalArgumentException。这是我的代码:

StringBuilder makeUrlFromWord = new StringBuilder();

List<String> splittedUrl = mParser.splitRequest(urls[0]);

try {
    makeUrlFromWord.append("http://")
        .append(URLEncoder.encode(splittedUrl.get(0), HTTP.UTF_8))
        .append(".jpg.to/");
} catch (UnsupportedEncodingException e) {
                e.printStackTrace();
}

Log.d("Made url", makeUrlFromWord.toString());

这是日志的一部分:

D/Made url﹕ http://%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.jpg.to/
W/System.err﹕ java.lang.IllegalArgumentException: Host name may not be null

链接是正确的,我在浏览器中尝试过,它会解码回西里尔符号并正常工作。

【问题讨论】:

  • 哪一行抛出了异常?
  • DefaultHttpClient 客户端 = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(urlString); HttpResponse 执行 = client.execute(httpGet);最后一行
  • @RvdK 它的编码之一,必须工作
  • $ curl http://%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.jpg.to/curl: (6) Couldn't resolve host '%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.jpg.to'
  • 在浏览器中我看到http://xn--b1agh1afp.jpg.to/$ curl http://xn--b1agh1afp.jpg.to/ 给出了` gifzona.ru/i/privet/01.gif" /> `

标签: java android http encoding


【解决方案1】:

看起来诀窍是使用IDNA encoding: Android 定义了java.net.IDN 提供转换功能。

【讨论】:

    【解决方案2】:

    这对我有用。感谢@18446744073709551615,将“привет.jpg.to”转换为“http://xn--b1agh1afp.jpg.to/

    makeUrlFromWord.append("http://")
       .append(IDN.toASCII(splittedUrl.get(0)))
       .append(".jpg.to/");
    

    【讨论】:

      猜你喜欢
      • 2017-11-04
      • 2011-08-19
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2010-12-21
      相关资源
      最近更新 更多