我有一个功能性应用程序在端口3000
上的docker中运行。将主机设置为http://localhost:3000
时,硒测试会起作用。我创建了一个容器来启动硒测试,但失败并显示以下错误:
WebDriverError:Reachederrorpage:about:neterror?e=nssFailure2&u=https://app:3000/&c=UTF-8&f=regular&d=An error occurred during a connection to app:3000.
SSL received a record that exceeded the maximum permissible length.
Error code: <a id="errorCode" title="SSL_ERROR_RX_RECORD_TOO_LONG">SSL_ERROR_RX_RECORD_TOO_LONG</a>
我的docker-compose.yml
app:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- ./:/usr/src/app/
ports:
- "3000:3000"
- "3001:3001"
networks:
tests:
selenium-tester:
build:
context: .
dockerfile: Dockerfile.selenium.tests
volumes:
- ./:/usr/src/app/
- /dev/shm:/dev/shm
depends_on:
- app
networks:
tests:
我用http://app:3000
替换了主机,但是firefox似乎想将此http重定向到https(不起作用)。最后,我像这样构建我的驱动程序:
const ffoptions = new firefox.Options()
.headless()
.setPreference('browser.urlbar.autoFill', 'false'); // test to disable auto https redirect… not working obviously
const driver = Builder()
.setFirefoxOptions(ffoptions)
.forBrowser('firefox')
.build();
在硒测试器容器内使用http://app:3000
手动联系curl
时,它可以正常工作,我得到了主页。
我现在缺乏创意,甚至分解我的问题来写这个问题也没给我带来新的想法
答案 0 :(得分:0)
您曾提到使用硒测试器容器内的curl手动联系http://app:3000,
此错误消息...
WebDriverError:Reachederrorpage:about:neterror?e=nssFailure2&u=https://app:3000/&c=UTF-8&f=regular&d=An error occurred during a connection to app:3000.
SSL received a record that exceeded the maximum permissible length.
Error code: <a id="errorCode" title="SSL_ERROR_RX_RECORD_TOO_LONG">SSL_ERROR_RX_RECORD_TOO_LONG</a>
...表示卷曲的SSL层或其依赖项之一似乎已损坏。
在此discussion中提到的@RussellFulton:
这似乎是您从 Firefox 中看到的结果,该服务器未针对SSL进行正确配置。 Chrome 可能只是给出了一般性的
ssl failed
错误。
当服务器期望HTTP请求时,浏览器发送 SSL握手时,可能会发生这种情况。服务器使用 400代码和一条错误消息进行响应,该错误消息比浏览器期望的握手消息大得多。因此,您会看到消息。
HTTPS 默认情况下通过端口 443 运行。
启用SSL模块后,也会发生此错误。
解决方案:您已运行a2enmod ssl
。
a2enmod ssl //要么 a2ensite default-ssl
在 ssl配置中提供了错误的 IP 。
解决方案:将IP更改为应该的IP。
如果不需要 ssl配置,请删除 IP 。
解决方案:更改
VirtualHost your.domain.com:443 //至 VirtualHost 默认:443
curl: (35) SSL received a record that exceeded the maximum permissible length.问题进行了详细讨论。
根据 Curl Support HTTPS proxy and SOCKS+HTTP(s),有另一种尝试将HTTPS代理支持纳入Curl。
此curl commit应该已经解决了您的问题。
答案 1 :(得分:0)
我遇到了完全相同的问题-无法通过HTTP从同一网络上其他Docker容器中的Selenium控制的浏览器(Chrome或Firefox)成功向应用程序发出请求。来自该容器的cURL虽然效果很好!使用HTTP进行连接,但是似乎有一些事情试图强制使用HTTPS。完全相同的情况,直到容器“ app”的名称。
答案是...这是容器的名称!
“ app”是HSTS预加载列表上的顶级域-也就是说,浏览器将强制通过HTTPS进行访问。
修正是使用不在HSTS预载列表中的容器名称。