如题:dom4j如何获取需要用户名密码认证的XML的内容例如:用dom4j如何获取这个XML的内容,XML的地址为:http://api.9911.com/statuses/friends_timeline.xml?count=10,这个XML需要用户名密码认证的。
补充个问题:如何获取一个节点为“create_at”的内容?用dom4j的哪个类什么方法?
例如: <created_at>Sat Feb 6 13:49:00 +0000 2010</created_at>
如何只获取 <created_at> 这个节点里的 “Sat Feb 6 13:49:00 +0000 2010” 这个内容?
麻烦各位帮忙解决下。先谢了!!
补充个问题:如何获取一个节点为“create_at”的内容?用dom4j的哪个类什么方法?
例如: <created_at>Sat Feb 6 13:49:00 +0000 2010</created_at>
如何只获取 <created_at> 这个节点里的 “Sat Feb 6 13:49:00 +0000 2010” 这个内容?
麻烦各位帮忙解决下。先谢了!!
你可以用urlconnection或apache httpcomponents来获得内容,这些都支持用户身份的验证。
1. get the contents
URL url = new URL (urlString);
String userPassword = theUsername + ":" + thePassword;
String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty ("Authorization", "Basic " + encoding);
InputStream content = (InputStream)uc.getInputStream();
StringBuffer csb = new StringBuffer();
BufferedReader in = new BufferedReader (new InputStreamReader (content));
String line;
while ((line = in.readLine()) != null) {
csb.append(line);
}
2. parse the contents use dom4j
...
.getElementsByTagName("created_at").item(0).getFirstChild().getNodeValue();
如果有错误,说明你用的类不是正确的;
import java.net.URL;
import java.net.URLConnection;
java.io.IOException: Server returned HTTP response code: 401 for URL: http://api.9911.com/statuses/friends_timeline.xml?id=1300009911
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at http.Dom4jDemo.openVXML(Dom4jDemo.java:89)
at http.DataDemo.testOpenVXML(DataDemo.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
是我用的类错了,刚刚那个错误解决了.现在远行出了这个错误了.
这一行的错误:InputStream content= (InputStream)uc.getInputStream();
public static void openVXML(String urlString ,String userName ,String password) throws Exception {
URL url=new URL(urlString);
String userPassword= userName + ":" + password;
String encoding=new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
URLConnection uc= url.openConnection();
uc.setRequestProperty ("Authorization","Basic"+ encoding);
InputStream content= (InputStream)uc.getInputStream();
StringBuffer csb=new StringBuffer();
BufferedReader in=new BufferedReader (new InputStreamReader (content));
String line;
while ((line= in.readLine())!=null) {
csb.append(line);
}
System.out.println(csb.toString());
}
public void testOpenVXML() {
try {
Dom4jDemo.openVXML("http://api.9911.com/statuses/friends_timeline.xml?id=1300009911", "[email protected]", "mail123");
} catch (Exception e) {
e.printStackTrace();
}
}
这是代码.
uc.setRequestProperty ("Authorization","Basic"+ encoding);
uc.setRequestProperty ("Authorization","Basic "+ encoding);
Basic后少一个空格。