我有一个文本框和提交按钮在我的jsp页面。当使用文本框中的url提交此按钮时,我将使用URLConnection获取该url的响应。
String strUrl = request.getParameter("url");
URL url = new URL(strUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
byte[] encodedBytes = Base64.encodeBase64("root:pass".getBytes());
String encoding = new String(encodedBytes);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream content = (InputStream) connection.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(content));
try {
fWriter = new FileWriter(new File("f:\\new.html"));
writer = new BufferedWriter(fWriter);
while ((line = in.readLine()) != null) {
String s = line.toString();
writer.write(s);
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}在生成的html页面中,每个css、js和图像都丢失了,因为它们是从本地获取的。例如,js放在我生成的html页面中,如下所示。
<script src="/ajax/libs/jquery/2.1.1/jquery.min.js"></script>但实际的src如下,
<script src="https://www.url.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>我知道有很多解决方案可以用url主机替换所有src,href。找到了很多与此相关的答案。
我用了如下的解决方案,
if (s.contains(("href="))) {
if (s.contains("\"../") || s.contains("\"/")) {
s = s.replace("\"../", "\"http://" + url.getHost() + "/");
s = s.replace("\"/", "\"http://" + url.getHost() + "/");
writer.write(s);
out.println(s);
}
}现在我可以得到链接,但它并不是所有的网站有用。这意味着它只对那些只有src和href这样的主机前缀的站点有帮助。
在一些网站中,链接被定义为href="frmArticles.aspx“。在这种情况下,仅用href url添加主机是不够的,因为href和src是不同的,即使我以主机作为前缀。例如,具有与其URL不同的href链接的折叠URL。
http://www.nakkheeran.in/Users/frmMagazine.aspx?M=2
<a href="frmArticles.aspx?A=25744">தை தை தை</a>如果,我要将主机添加到这个href中,如下所示,
<a href="http://www.nakkheeran.in/frmArticles.aspx?A=25744">தை தை தை</a>而这是无法得到的。因为,实际的url是
<a href="http://www.nakkheeran.in/Users/frmArticles.aspx?A=25744">தை தை தை</a>发布于 2016-01-12 18:25:37
本质上有两种获取绝对URL的方法:
abs:href属性getter。它的工作方式如下:
元素a= myDoc.select("a").first();//选择页面上的第一个链接,用获得链接(元素)字符串url =a.attr(“abs:href”)所需的任何选择器替换;//获取链接(href属性)的绝对url。
请注意,您需要提供您正在使用的HTML文档的URL,这样它就可以正确地解析URL,如果您使用Jsoup.connect(myHtmlUrl).get(),这是自动完成的,如果您要从字符串或文件解析HTML,则需要提供它,使用适当的Jsoup.parse()方法,它允许您提供基本URL。发布于 2016-01-12 10:18:27
URL类有一个构造函数URL(URL context, String url),用于执行您尝试使用regexp所做的工作。
编辑:在您的示例中,context URL是解析资源的源URL。假设您解析了URL context = new URL("http://example.com/path/to/some.html#where?is+carmen+sandiego")中的一些内容。然后,您只需获取任何链接的引用并创建一个URL ref = new URL(context, src)。
https://stackoverflow.com/questions/34740166
复制相似问题