当前位置: 首页 > 知识库问答 >
问题:

在Java中获取重新加载的URL

伊裕
2023-03-14

是否可以在Java中获取重新加载的url?

我需要检索令牌附加到url后加载下面的超文本标记语言页面。

最初,URL将为

http://localhost:8080/validate.html?invisible=true代码

成功后google-recaptcha它将是

<代码>http://localhost:8080/validate.html?token=xyz

我需要在Java中检索令牌值。

我尝试了下面的代码,但var返回了null。

有什么解决方案吗?

final String htmlUrl = "http://localhost:8080/validate.html?invisible=true";
        HttpURLConnection con = (HttpURLConnection)(new URL( htmlUrl ).openConnection());
con.setInstanceFollowRedirects( true );

con.connect();
int responseCode = con.getResponseCode();
System.out.println( responseCode );
String location = con.getHeaderField( "Location" );
System.out.println( location );
<html>
  <script> function reCaptchaCallback(token){ window.location = '?token=' + token; } </script>
  <script src="https://www.google.com/recaptcha/**.js?render=123"></script>
  <script src="https://www.google.com/recaptcha/**.js?onload=onloadCallback&render=explicit"></script>
  <script>
    const url = new URL(window.location.href);
    if (!url.searchParams.get('token')) {
      if (url.searchParams.get('visible') != 'true') {
        grecaptcha.enterprise.ready(function() {
          grecaptcha.enterprise.execute('123', {action: 'homepage'}).then(function(token) {
            reCaptchaCallback(token);
          });
        });        
      }
    }
  </script>

  <script type="text/javascript">
    var onloadCallback = function() {
      if (url.searchParams.get('visible') == 'true') {
        grecaptcha.enterprise.render('recaptcha', { 'sitekey' : '123', 'callback': 'reCaptchaCallback' });        
      }
    };
  </script>

  <body style= "display: flex; align-items: center; justify-content: center;">
    <div id="recaptcha"></div>
  </body>
</html>

共有1个答案

黄凌龙
2023-03-14

您试图做的是不可能的(至少在使用HttpURLConnection时是不可能的)

第一个问题是,位置标头由web服务器设置为重定向用户
您正在通过更改窗口来更改位置客户端。位置(与加载站点时发送的位置标题无关)。

第二个问题是,HttpURLConnection只执行一个加载验证的请求。html。创建连接与使用浏览器打开网站不同。你的浏览器做得更多(它解析HTML,加载图像、脚本和其他文件,执行javascript/wasm文件,并在连接和获取你的验证HTML的内容后呈现你的HTML/css)。

您可以通过使用无头浏览器(如chromium)来执行类似操作。为此,您需要使用像Selenium这样的库

 类似资料:
  • 我在Hibernate重新加载查询中的实体时遇到问题,即使它们是作为主查询的一部分获取的。 实体如下(简化) 这是对父/子关系的闭包表进行建模。 我制定了以下一些标准 这导致以下SQL查询 看起来它正确地实现了连接获取。但是当我执行 我在结果集中的每行SQL日志中看到这些条目之一 看起来即使DataContents被标记为懒加载,它也在急切地加载。 因此,我要么希望在我的查询中以某种方式获取加入数

  • 我目前正在开发一个应用程序,可以在用户手机上找到所有MP3,然后将它们放入列表中。这是非常好的工作,非常快,即使有很多歌曲。现在,我为列表中的每个项目填充一个新列表,然后将其显示在我的recyclerview中。问题是,我的手机上有700首歌曲,这在相当长的一段时间内会阻塞UI线程。 现在,我想使用回收站视图不将列表中的所有项目一次加载到对象中,而是仅在它们即将显示时加载-但我不知道如何做到这一点

  • 我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片

  • 正如在C 11中所知,有6个内存顺序,在关于std::memory\u order\u acquire的文档中: http://en.cppreference.com/w/cpp/atomic/memory_order memory\u order\u acquire内存\u顺序\u获取 具有此内存顺序的加载操作对受影响的内存位置执行获取操作:在此加载之前,当前线程中的内存访问不能重新排序。这可以

  • 问题内容: 目前,我正在处理一个包含子模块并使用numpy / scipy的python项目。Ipython用作交互式控制台。不幸的是,我对现在使用的工作流程不是很满意,请多多指教。 在IPython中,该框架是通过一个简单的命令加载的。但是,通常有必要在框架的子模块之一中更改代码。至此,一个模型已经加载完毕,我使用IPython与之交互。 现在,该框架包含许多相互依赖的模块,即,在最初加载框架时

  • 问题内容: 如何从JNA用C调用具有此方法签名的方法? C方法的最后两行如下所示: 那是该方法的唯一用途。这意味着我必须将poiner传递给该方法的空指针,对吗?然后,该方法用对象的地址填充空指针,然后我可以将指向设备的指针传递给其他方法。 我的问题是:这是正确的方法吗?如果是,如何从Java分配新的指针? 根据公认的答案,我这样做: 问题答案: 看来,JNA 类具有允许多个间接访问的和方法,并且