发布包含下划线的网址(_)

时间:2012-11-30 12:49:07

标签: android

我发布了一个带有下划线(_)的参数的网址。

示例:http://sdsdsds_asasasahjhd.com/dsdsdsd/login.json?

我发布的内容如下:

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://sdsdsds_asasasahjhd.com/dsdsdsd/login.json?");
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("key1", "value1"));
        nameValuePairs.add(new BasicNameValuePair("key2", "value2"));
        nameValuePairs
                .add(new BasicNameValuePair("key3", "value3"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (Exception e) {
        e.printStackTrace();
    }

当我正在检查httpclient.execute(httppost)时,我正在获取IllegalArgumentException并且在异常详细信息中发现它正在告诉Host name cannot be null。 请指明任何解决方案。

我在这里经历了其他一些问题:

但没有用,因为我没有编码整个网址。

4 个答案:

答案 0 :(得分:1)

我有一个带有网络实现机制的开源库。它只接收一个解决方案实现。所有你需要它来通过反射设置主机以防万一:

        final URI uriObj = new URI("https", host, path, null, null);
        if (uriObj.getHost() == null) {
            final Field hostField = URI.class.getDeclaredField("host");
            hostField.setAccessible(true);
            hostField.set(uriObj, host);
        }
        return uriObj;

提交是here

答案 1 :(得分:0)

它清楚地说明主机名不能为空..你的网址没有指定一个..

预计网址格式为

http://hostName.com/example..../example.json

答案 2 :(得分:0)

HttpPost httppost = new HttpPost(String);

此构造函数将尝试从提供的String中形成URL实例。如果失败,您将处理null值。

如果您希望我们能够为您提供进一步的帮助,请发布您正在使用的实际网址,而不是样本。

答案 3 :(得分:0)

查看此链接。 Apache不支持下划线。你应该改变网址

https://issues.apache.org/jira/browse/HTTPCLIENT-911