相关文章推荐
逆袭的圣诞树  ·  Android ...·  5 天前    · 
大力的镜子  ·  使用libSSH2实现与Linux ...·  2 月前    · 
无邪的松树  ·  log4j ...·  1 年前    · 

在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);
//向对应的网址发送GET请求,判断返回码
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
                                    这个错误通常是由于您在程序中使用了非法字符导致的。
这个错误的具体原因是,在您的程序中使用了不合法的字符,导致 Javajava.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;