当前位置: 首页 > 面试题库 >

如何以编程方式检查页面的网址是否正在重定向?

边明煦
2023-03-14
问题内容

我正在尝试提取网页A的内容。使用groovy我尝试了以下操作

......
String urlStr = "url-of-webpage-A"
String pageText = urlStr.toURL().text
//println pageText
.....

上面的代码检索webPage A的文本,只要它不重定向到另一个网页B。如果A重定向到B,则在pageText变量中检索webPage
B的页面内容。有没有一种方法可以编码和检查webPage A是否重定向到其他网页(使用groovy或Java)?

PS:上面的代码不是服务器端逻辑的一部分。我在桌面应用程序范围内的客户端上执行它。


问题答案:

groovy中,您可以通过执行以下操作来实现oachim的建议:

String location = "url-of-webpage-A"
boolean wasRedirected = false
String pageContent = null

while( location ) {
  new URL( location ).openConnection().with { con ->
    // We'll do redirects ourselves
    con.instanceFollowRedirects = false

    // Get the response code, and the location to jump to (in case of a redirect)
    location = con.getHeaderField( "Location" )
    if( !wasRedirected && location ) {
      wasRedirected = true
    }

    // Read the HTML and close the inputstream
    pageContent = con.inputStream.withReader { it.text }
  }
}

println "wasRedirected:$wasRedirected contentLength:${pageContent.length()}"

如果您不想被重定向,并且想要第一页的内容,则只需执行以下操作:

String location = "url-of-webpage-A"
String pageContent = new URL( location ).openConnection().with { con ->
  // We'll do redirects ourselves
  con.instanceFollowRedirects = false

  // Get the location to jump to (in case of a redirect)
  location = con.getHeaderField( "Location" )

  // Read the HTML and close the inputstream
  con.inputStream.withReader { it.text }
}

if( location ) { 
  println "Page wanted to redirect to $location"
}
println "Content was:"
println pageContent


 类似资料:
  • 问题内容: 如何检查Glassfish DAS是否以编程方式运行,即使已将其部署在本地计算机还是远程计算机上? 使用Java6 问题答案: 我找到了一种方法来检查DAS是否已启动,而不是Linux脚本。通过这种方式,我的应用程序和DAS都在同一台计算机上还是每台安装在不同的计算机上都没有关系。 }

  • 问题内容: 我有以下情况: 这些检查都没有成功。只有路径不同:u1的路径为“ /”,而u2的路径为“”。这些URL是否指向相同的资源,是否可以在不打开连接的情况下检查这种情况?我是否误解了有关URL的一些基本知识? 编辑 我应该指出,需要非黑客检查。说空路径== /是否合理?我希望没有这种代码 问题答案: 从2007 JavaOne中: 第二个难题的标题是“集的更多乐趣”,它使用户可以创建由多个U

  • 问题内容: 在C语言中,如何以编程方式找出Linux / Ubuntu上是否已在运行某个进程,以避免该进程两次启动?我正在寻找类似于pidof的东西。 问题答案: 您可以进入这些条目并在文件中检查过程,也可以在链接上执行操作(以下使用第一种方法)。

  • 我们以编程方式安装了应用程序。 如果应用程序已安装在设备中,则应用程序将自动打开。 指引我。我完全不知道。谢谢。

  • 问题内容: 如标题所述,我想以编程方式检查域的DNS响应是否受DNSSEC保护。 我该怎么办? 如果有Pythonic解决方案,那就太好了。 更新:更改了响应请求,对于您的困惑感到抱歉 问题答案: 使用DNS解析器(例如),您可以查询域的DNSKEY RRset并打开(dnssec OK)查询标志。如果查询成功,则答案将设置(已认证数据)标志,并将包含区域的RRSIG签名(如果已签名)。 更新:使

  • 我需要检查由Wildfly 8.2部署的应用程序的部署状态。1以编程方式(最好是java)。就我而言,有多种方法可以实现这一目标: 监视部署文件夹中的信号量文件(如部署时为war文件创建了已部署文件)。 通过调用在war文件成功部署时应该可用的rest服务进行检查 使用JMX mbean 可能还有其他方法,我还不知道。但我更感兴趣的是学习使用JMX MBean的方法。但不幸的是,我的在线搜索没有给