java.net.URISyntaxException: Illegal character in query at index,http请求url中有非法字符导致

本文探讨了在使用HttpClient请求包含特殊字符(如‘|’‘&’)的URL时遇到的错误,并提供了两种解决方案:一是通过URI类转换并请求;二是使用URLEncoder.encode方法进行转码。文章偏向前者,因后者可能过度转义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在url中包含(‘|’‘&’)这些字符直接用HttpClient请求就会报上述错误,

在网上看了一下解决办法有两种都是将非法字符进行转码再请求

列如:String url=http://baidu/yztb/createDownloadReturnFile2.action?key2=330802196704034461|tz_gaj_cer_052|8d255559-eefd-4e97-ad82-63ae49896847.pdf

一、
import java.net.URI;
import java.net.URL;

URL url1 = new URL(url);
URI uri = new URI(url1.getProtocol(), url1.getHost(), url1.getPath(), url1.getQuery(), null);
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(uri);
HttpResponse response = client.execute(httpget);

HttpEntity entity = response.getEntity();

 

二、
import java.net.URLEncoder;

String path = URLEncoder.encode(strUrl,"utf-8");

个人比较偏向第一种方法,因为第二种转义会将url中所有的字符都转义,导致请求错误

 

参考:https://blog.youkuaiyun.com/qq_34972627/article/details/74908653
           https://www.cnblogs.com/qianzf/p/8541925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值