我发布了一个带有下划线(_)的参数的网址。
示例: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
。
请指明任何解决方案。
我在这里经历了其他一些问题:
但没有用,因为我没有编码整个网址。
答案 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不支持下划线。你应该改变网址