5

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

样本: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。请指定任何解决方案。

我在这里解决了一些其他问题:

但没有用,因为我没有对整个 url 进行编码。

4

4 回答 4

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;

提交在这里

于 2013-04-07T18:00:30.290 回答
0

请参阅此链接。Apache 不支持下划线。你应该改变网址

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

于 2013-07-30T13:58:34.270 回答
0

好吧,它清楚地表明主机名不能为空..您的网址没有指定一个..

网址应采用以下格式

http://hostName.com/example..../example.json
于 2012-11-30T12:51:24.823 回答
0

HttpPost httppost = new HttpPost(String);

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

如果您希望我们能够进一步帮助您,请发布您正在使用的实际 URL,而不是示例。

于 2012-11-30T12:53:14.180 回答