在String型的url中包含(“&”、“|”、“-”)这些字符直接用HttpClient请求就会报错
URISyntaxException: Illegal character
。
解决方式:
不能直接用String代替URI来访问。必须采用%0xXX方式来替代特殊字符(转义)。
但这种办法不直观。所以只能先把String转成URL,再能过URL生成URI的方法来解决问题。代码如下:
String strUrl = "http://baidu.action?key2=xxxxx";
URL url = new URL(strUrl);
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(uri);
HttpResponse httpResponse = httpClient.execute(httpGet);;
int code = httpResponse.getStatusLine().getStatusCode();
encodeURI(),用来encode整个URL,不会对下列字符进行编码:+ : / ; ?&。它只会对汉语等特殊字符进行编码
encodeURIComponent (),用来en
这个错误通常是由于您在程序中使用了非法字符导致的。
这个错误的具体原因是,在您的程序中使用了不合法的字符,导致 Java 的 java.net.URISyntaxException 异常被抛出。
为了解决这个问题,您需要检查您的程序代码,确保没有使用不合法的字符。如果找到了不合法的字符,您需要将它替换为合法的字符。
例如,如果您在程序中使用了一个非法的字符作为 URL 中的查询参数,您可能会看到类...
创建URI的字符串中出现了非法字符,截图中的非法字符是“二”后面有个空格。第一想法就是使用trim()方法剔除空格,但是仔细一想,这种处理方式只能剔除空格非法字符,却无法剔除中括号 “[”、“]” 这样的非法字符,写法太死板。
初学Spring Cloud在模块间的调用时遇到的问题
URISyntaxException的意思指url不符合规范出现了异常,我报错的url地址如下java.net.URISyntaxException: Illegal character in path at index 57: http://XUEYUAN-UCSERVICE/ucenter/member/countRegisterNum/...
在做接口测试或者压测过程中,经常会出现 java.net.URISyntaxException: Illegal character in fragment at index xxx报错问题,如下图所示:
原因分析:
出现此问题,一般是由于url中有特殊字符(非字母和数字的字符),没有转码。
解决方法:
将带有特殊字符参数进行转码即可,如下列表:
改换好,再重新启动就可以了。
使用StringencoderString=URLEncoder.encode(testString,"utf-8");必须采用%0xXX方式来替代特殊字符。所以只能先把String转成URL,再能过URL生成。地址中涉及了特殊字符,如‘|’‘&’等。所以不能直接用String代替。...
在网上看了一下解决办法有两种都是将非法字符进行转码再请求
列如:String url=http://baidu/yztb/createDownloadReturnFile2.action?key2=330802196704034461|tz_gaj_cer_052|8d255559-eefd-4e97...
调用HTTP接口,报错:java.net.URISyntaxException: Illegal character in scheme name at index 0:
错误原因:
(1)以前竟然没注意过,HTTP请求URL前面如果有空格就会报错,例如:
String baseUrl = " http://117.107.1.22:666/sys/Push/Index";
(2)这个网站中h...
View.OnClickListener onClickListener=new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId())
case R.id.baidu_btn:
if (MDMUtil.appIsInstalled( getContext(),"com.baidu.BaiduMap")) {//传入指定应用包名
try {
double[] gd_lat_lon ;
if(RoutingXModel.isGpslatlon){
gd_lat_lon= gaoDeToBaidu(xModel.poc_lon,xModel.poc_lat);
}else{
gd_lat_lon= new double[2];
gd_lat_lon[0]=xModel.poc_lon;
gd_lat_lon[1]=xModel.poc_lat;
Intent intent = Intent.getIntent("intent://map/direction?" +
"destination=latlng:" + gd_lat_lon[1] + "," + gd_lat_lon[0]+ "|name:我的目的地" + //终点
"&mode=driving&" + //导航路线方式
"&src=appname#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent); //启动调用
} catch (URISyntaxException e) {
Log.e("intent", e.getMessage());
} else {//未安装
//market为路径,id为包名
//显示手机上所有的market商店
Toast.makeText(getContext(), "您尚未安装百度地图", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(getContext().getPackageManager()) != null){
getContext().startActivity(intent);
dismiss();
break;
case R.id.gaode_btn:
if (MDMUtil.appIsInstalled( getContext(),"com.autonavi.minimap")) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
double[] gd_lat_lon ;
if(!RoutingXModel.isGpslatlon){
gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon);
}else{
gd_lat_lon= new double[2];
gd_lat_lon[0]=xModel.poc_lon;
gd_lat_lon[1]=xModel.poc_lat;
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse("androidamap://navi?sourceApplication=appname&poiname=fangheng⪫=" + gd_lat_lon[1] + "&lon;=" + gd_lat_lon[0] + "&dev=0&style=4");
intent.setData(uri);
//启动该页面即可
getContext().startActivity(intent);
} else {
Toast.makeText(getContext(), "您尚未安装高德地图", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(getContext().getPackageManager()) != null){
getContext().startActivity(intent);
dismiss();
break;
case R.id.tencent_btn:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
double[] gd_lat_lon ;
if(!RoutingXModel.isGpslatlon){
gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon);
}else{
gd_lat_lon= new double[2];
gd_lat_lon[0]=xModel.poc_lon;
gd_lat_lon[1]=xModel.poc_lat;
//将功能Scheme以URI的方式传入data
Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&to;=我的目的地&tocoord;=" + gd_lat_lon[1]+ "," + gd_lat_lon[0]);
intent.setData(uri);
if (intent.resolveActivity(getContext().getPackageManager()) != null) {
//启动该页面即可
getContext().startActivity(intent);
} else {
Toast.makeText(getContext(), "您尚未安装腾讯地图", Toast.LENGTH_LONG).show();
dismiss();
break;
case R.id.cancel_btn2:
dismiss();
break;