我的要求是做Web应用程序以获取目标内容,并且必须使用HttpURLConnection添加请求标头。
我使用此代码
try{
String urlStr = "http://test/STAM/Login";
url = new URL(urlStr);
urlconn = (HttpURLConnection)url.openConnection();
urlconn.setRequestProperty("Accept-Language","en-us,en;q=0.5");
urlconn.setRequestProperty("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
urlconn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");
urlconn.connect();
//read the result from the server
rd = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
sb = new StringBuilder();
while ((line = rd.readLine()) != null)
{
sb.append(line + '\n');
}
out.println(sb.toString());
} catch(Exception e) {
e.printStackTrace();
} finally {
//close the connection, set all objects to null
urlconn.disconnect();
rd = null;
sb = null;
wr = null;
urlconn = null;
}
结果是:我的代码将仅获取源内容,但无法获取CSS,图像文件,JavaScript等,因为它将从本地主机(例如“ http:// localhost:8080 / test / img / test.gif”)而不是“ http: //test/STAM/img/test.gif”。如果我错了,或者您有任何解决此问题的方法,请告知我。
非常感谢。
据我了解,您期望在获取html页面时获取页面中使用的所有资源(css / js / images / ...)。
您可能知道,HTML是引用外部资源的标记语言。获取所有这些资源并呈现页面是Web浏览器的工作。如果要拥有所有资源,则应解析源内容以提取到资源的链接并分别获取它们。
如果要从原始位置重用资源,则必须注意,从打开页面的位置仍然可以访问资源URL。 (URL could be absolute or relative)
请勿使用HttpUrlConnection来执行此操作。您将最终解析html文件来解决已经解决的问题。
使用:HttpClient
我已经在网上使用URLConnection来从任何网站获取HTML css和javascript代码的源,在此示例中,我尝试在此示例中使用URL和URLConnection和InputStream来获取Microsoft网站的代码。
import java.io.BufferedInputStream;
import java.io.IOExecption;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLExeption;
import java.net.URL;
import java.net.URLConnection;
public class Main2{
public static void main(String[] args) throws IOException{
URL u = new URL("http://www.microsoft.com/");
URLConnection uc = u.openConnection();
InputStream is = uc.getInputStresm();
InputStream buf = new BuffredInputStream(is);
Reader r = new InputStreamReader(buf);
int i;
while((i = r.read()) != -1){
System.out.println((char)i);
}
}
}