【问题标题】:HttpServletRequest getRemoteAddr() returns ipv6 address, but unable to connect to itHttpServletRequest getRemoteAddr() 返回 ipv6 地址,但无法连接
【发布时间】:2016-11-17 06:20:25
【问题描述】:

我有一个 spring mvc web-app,它基本上在客户端机器上运行 selenium 测试。

我使用以下命令在客户端系统中创建了一个 selenium-hub 和节点 -

>java -jar selenium-server-standalone-3.0.1.jar -role hub

>java -Dwebdriver.ie.driver=D:\IEDriver\IEDriverServer.exe -jar selenium-server-standalone-3.0.1.jar -role node -hub http://localhost:4444/grid/register -timeout 20 -browserTimeout 60

我的 spring 控制器获取 url 的参数并使用 RemoteWebDriver 在客户端系统中使用该参数运行 selenium 测试

这是我的弹簧控制器-

@RequestMapping("/remote-app/{policyNumber}")
    public @ResponseBody String getOIPA(@PathVariable("policyNumber") String polNumber,HttpServletRequest request) throws MalformedURLException
    {
        String clientIp = request.getRemoteAddr();
        System.out.println("Input policy number : "+polNumber);
        System.out.println("Client IP : "+clientIp);
        oipaService.openOipaAddressScreenRemote(polNumber,clientIp);
        return "hello  "+polNumber+"   "+clientIp;
    }

这是我运行测试的服务方法 -

public void openOipaAddressScreenRemote(String policyNumber,String ip) throws MalformedURLException {

        System.out.println("Policy number input : "+policyNumber);
        String oipaURL = "https://mydom.com/PASJava_Term";
        String userName = "user";
        String password = "pwd";

        //-------------------

        String remoteUrlString = "http://"+ip+":4444/wd/hub";
        System.out.println(remoteUrlString);
        DesiredCapabilities caps = DesiredCapabilities.internetExplorer();

        caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

        WebDriver driver = new RemoteWebDriver(new URL(remoteUrlString),caps);


        //-------------------

        driver.get(oipaURL);}

它在我组织的客户端系统 (PC) 中为我提供了所需的结果,该系统连接到客户端的 IPv4 地址。

但问题是,当我在组织中使用笔记本电脑客户端时,它会返回 IPv6,而应用程序无法连接。

他们通过笔记本电脑名称进行连接,例如- lt00123。 即 selenium RemoteWebDriver 能够连接到http://lt00123:4444/wd/hub

如果可能的话,如何根据需要识别客户端地址(ipv4 或机器名称)。

编辑:使用here 的解决方案后,我解决了 IPv6 问题。从here 我发现我需要在一台机器上设置集线器(最好在服务器位置),并使用集线器在客户端机器上设置节点。现在我的弹簧控制器不需要知道客户的地址。它已经知道枢纽的位置。

【问题讨论】:

标签: java spring-mvc selenium ip remotewebdriver


【解决方案1】:

原问题的解决方案是here

我只是对我的代码做了一些小改动 -

在服务器位置设置集线器-

>java -jar selenium-server-standalone-3.0.1.jar -role hub -port 4444

在客户端机器上设置节点 -

>java -Dwebdriver.ie.driver=D:\IEDriver\IEDriverServer.exe -jar selenium-server-standalone-3.0.1.jar -role node -hub http://[server ip]:4444/grid/register -timeout 20 -browserTimeout 60

控制器 -

   @RequestMapping("/remote-app/{policyNumber}")
        public @ResponseBody String getOIPA(@PathVariable("policyNumber") String polNumber) throws MalformedURLException
        {
            String clientIp = request.getRemoteAddr();
            System.out.println("Input policy number : "+polNumber);
            oipaService.openOipaAddressScreenRemote(polNumber);
            return "hello  "+polNumber;
        }

服务方法——

public void openOipaAddressScreenRemote(String policyNumber) throws MalformedURLException {

        System.out.println("Policy number input : "+policyNumber);
        String oipaURL = "https://mydom.com/PASJava_Term";
        String userName = "user";
        String password = "pwd";

        //-------------------

        String remoteUrlString = "http://"+{server ip here}+":4444/wd/hub";
        System.out.println(remoteUrlString);
        DesiredCapabilities caps = DesiredCapabilities.internetExplorer();

        caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

        WebDriver driver = new RemoteWebDriver(new URL(remoteUrlString),caps);


        //-------------------

        driver.get(oipaURL);
}

现在我的控制器不需要知道客户端的 ip。我没有在每台客户端机器上使用一个集线器和一个节点,而是在服务器中使用了一个集线器,在每个客户端中使用了一个节点。

现在我可以在多个客户端的客户端系统上从客户端进行测试。

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2012-08-18
    • 1970-01-01
    • 2012-11-08
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2021-10-28
    相关资源
    最近更新 更多