程序使用的URL出现异常,请大家帮忙看一下

jojo_0214 2012-02-20 11:10:05
自己做的人人自动登录程序,并访问好友页面程序,这是程序:
public String notify(String url) {
HttpGet get = new HttpGet(url);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String txt = null;
String filepath = null;
try {
txt = httpClient.execute(get, responseHandler);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
get.abort();
}
return txt;
}
public static void main(String[] args) {
RenRenNotify notify = new RenRenNotify("123456789@123.com",
"123456789");//这个代码就不贴出来了,没有问题,可以登录上,已经测试过。

System.out.println(notify.notify("http://friend.renren.com/shareFriends?t=0.2351487116323684&p={%22init%22:true,%22uid%22:true,%22uhead%22:true,%22uname%22:true,%22group%22:true,%22net%22:true,%22param%22:{%22guest%22:292794698}}"));//这是出问题的URL,也是要访问的URL,换成其他的正规URL可以,就是这个不可以,程序报出异常
}
这是终端显示的异常:
Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(URI.java:842)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
at Visitall.RenRenNotify.notify(RenRenNotify.java:153)
at Visitall.RenRenNotify.main(RenRenNotify.java:317)

Caused by: java.net.URISyntaxException: Illegal character in query at index 61: http://friend.renren.com/shareFriends?t=0.2351487116323684&p={"init":true,"uid":true,"uhead":true,"uname":true,"group":true,"net":true,"param":{"guest":292794698}}
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parseHierarchical(URI.java:3072)
at java.net.URI$Parser.parse(URI.java:3014)
at java.net.URI.<init>(URI.java:578)
at java.net.URI.create(URI.java:840)
... 3 more

在网上查,说自己这个URL不正规,但是把这条URL放到chrome浏览器,可以轻松打开,并访问,不知道这里存在URL字符无法识别的问题,请大家帮忙看一下,谢谢。
...全文
8344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小黑java 2014-01-23
  • 打赏
  • 举报
回复
java.net.URISyntaxException的解决办法 近日在用HttpClient访问抓取汇率时,为了省力,直接采用 String url = "http://api.liqwei.com/currency/?exchange=usd|cny&count=1"; HttpClient client = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); HttpResponse response = client.execute(httpget); 以前用这种方法都没有问题,但这次却报如下错误: java.net.URISyntaxException: Illegal character in query at index 44 查找了一些网上资料,说地址中涉及了特殊字符,如‘|’‘&’等。所以不能直接用String代替URI来访问。必须采用%0xXX方式来替代特殊字符。但这种办法不直观。所以只能先把String转成URL,再能过URL生成URI的方法来解决问题。代码如下 URL url = new URL(strUrl); URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null); HttpClient client = new DefaultHttpClient(); HttpGet httpget = new HttpGet(uri);
jojo_0214 2012-02-21
  • 打赏
  • 举报
回复
已经解决问题,太谢谢ldh911了~~[Quote=引用 4 楼 ldh911 的回复:]

对了,URLEncode从?之后的参数开始,不要把域名和路径也放进去了。
[/Quote]
MiceRice 2012-02-21
  • 打赏
  • 举报
回复
对了,URLEncode从?之后的参数开始,不要把域名和路径也放进去了。
MiceRice 2012-02-21
  • 打赏
  • 举报
回复
咋会这么诡异?其实主要问题也就是个 左右大括号 “{}”

干脆直接自己 replaceAll 算了,两次:
“{” => %7B
“}” => %7D
jojo_0214 2012-02-21
  • 打赏
  • 举报
回复
这是我修改的代码对原始url做编码:
String a = "friend.renren.com/shareFriends?t=0.2351487116323684&p={%22init%22:true,%22uid%22:true,%22uhead%22:true,%22uname%22:true,%22group%22:true,%22net%22:true,%22param%22:{%22guest%22:292794698}}";
try{
String c = URLEncoder.encode(a,"UTF-8");
String d = "http://" + c;
System.out.println(notify.notify(d));
}
catch (UnsupportedEncodingException ex) {

throw new RuntimeException("Broken VM does not support UTF-8");
}
可是又出现了异常:
Exception:java.lang.NumberFormatException: For input string: "true,%22uid%22:true,%22uhead%22:true,%22uname%22:true,%22group%22:true,%22net%22:true,%22param%22:{%22guest%22:292794698}}"
不知道为什么,是该url中传递参数出了问题吗?为什么谷歌浏览器就可以打开~~
[Quote=引用 1 楼 ldh911 的回复:]

用URLEncode先对你原始url做个编码,然后使用编码后的String。
[/Quote]
MiceRice 2012-02-21
  • 打赏
  • 举报
回复
用URLEncode先对你原始url做个编码,然后使用编码后的String。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧