如何让 HTTPS 端点在 WireMock 中成功代理?
How to get HTTPS endpoints to proxy successfully in WireMock?
我正在编写内部使用 WireMock 的 HTTP 记录回放代理,并且在记录 HTTPS 目标时遇到问题。 HTTP 站点工作正常。
以下是我为未加密站点设置 WireMock 代理的方法:
java \
-jar /var/proximate/wiremock-standalone-2.4.1.jar \
--port 9000 \
--proxy-all http://ilovephp.jondh.me.uk \
--record-mappings \
--root-dir /remote/experiment/record/http
然后我可以使用此命令在该站点上录制任何内容:
wget -e use_proxy=yes -e http_proxy=proximate-proxy:9000 \
http://ilovephp.jondh.me.uk/en/tutorial/make-your-own-blog
很快我就会得到一些自动创建的映射:
/ # ls -R /remote/experiment/record/http
/remote/experiment/record/http:
__files mappings
/remote/experiment/record/http/__files:
body-tutorial-make-your-own-blog-tWrNm.txt
/remote/experiment/record/http/mappings:
mapping-tutorial-make-your-own-blog-tWrNm.json
这是大致相同的内容,但在 SSL 站点上。先代理:
java \
-jar /var/proximate/wiremock-standalone-2.4.1.jar \
--port 9000 \
--proxy-all https://www.rottentomatoes.com/ \
--record-mappings \
--root-dir /remote/experiment/record/https \
--verbose
这里是提取:
wget -e use_proxy=yes -e http_proxy=proximate-proxy:9000 \
https://www.rottentomatoes.com/
WireMock 的结果是创建了内部缓存目录,但它们不包含任何内容:
/ # ls -R /remote/experiment/record/https
/remote/experiment/record/https:
__files mappings
/remote/experiment/record/https/__files:
/remote/experiment/record/https/mappings:
我在 Docker 容器中的 Alpine 3.4 上使用 WM 2.4.1。我是否需要使用某些 https
特定的命令行开关才能使其正常工作?
更新
看到最近发布的 2.5.0 最近合并了 https-bind-address-bug
,我暂时感到振奋,这听起来很相关。我试过这个版本,但不幸的是它没有任何区别。
这已部分解决 - 我的主要错误是为 WireMock 和客户端分别设置了 HTTPS 连接的代理地址。我现在正在使用:
java \
-jar /var/proximate/wiremock-standalone-2.4.1.jar \
--port 9000 \
--https-port 9050 \
--proxy-all https://www.rottentomatoes.com/ \
--record-mappings \
--root-dir /remote/experiment/record/https \
--verbose \
--print-all-network-traffic
我添加了 --print-all-network-traffic
这样我就可以查看是否有任何 HTTPS 流量正在访问代理(现在是)。
这是新的客户端命令,带有新的代理指令:
wget -e use_proxy=yes -e http_proxy=proximate-proxy:9000 \
-e https_proxy=proximate-proxy:9050 \
--verbose \
--user-agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0" \
https://www.rottentomatoes.com/
但是,现在实际正在使用代理,看起来操作没有成功完成。我已经尝试过其他加密站点并收到相同的模糊错误:
Resolving proximate-proxy... 172.18.0.2
Connecting to proximate-proxy|172.18.0.2|:9050... connected.
Failed reading proxy response: No error information
Retrying.
--2017-01-26 09:20:18-- (try: 2) https://www.rottentomatoes.com/
Connecting to proximate-proxy|172.18.0.2|:9050... connected.
Failed reading proxy response: No error information
Retrying.
--2017-01-26 09:20:20-- (try: 3) https://www.rottentomatoes.com/
Connecting to proximate-proxy|172.18.0.2|:9050... connected.
Failed reading proxy response: No error information
Retrying.
^C
我已经替换了用户代理,以防根据标准 "wget" 字符串出现一些 third-party 拒绝,但这似乎也没有影响。
我会问一个关于这个的新问题,以缩小这是 WireMock 还是 Wget 问题的范围。
我正在编写内部使用 WireMock 的 HTTP 记录回放代理,并且在记录 HTTPS 目标时遇到问题。 HTTP 站点工作正常。
以下是我为未加密站点设置 WireMock 代理的方法:
java \
-jar /var/proximate/wiremock-standalone-2.4.1.jar \
--port 9000 \
--proxy-all http://ilovephp.jondh.me.uk \
--record-mappings \
--root-dir /remote/experiment/record/http
然后我可以使用此命令在该站点上录制任何内容:
wget -e use_proxy=yes -e http_proxy=proximate-proxy:9000 \
http://ilovephp.jondh.me.uk/en/tutorial/make-your-own-blog
很快我就会得到一些自动创建的映射:
/ # ls -R /remote/experiment/record/http
/remote/experiment/record/http:
__files mappings
/remote/experiment/record/http/__files:
body-tutorial-make-your-own-blog-tWrNm.txt
/remote/experiment/record/http/mappings:
mapping-tutorial-make-your-own-blog-tWrNm.json
这是大致相同的内容,但在 SSL 站点上。先代理:
java \
-jar /var/proximate/wiremock-standalone-2.4.1.jar \
--port 9000 \
--proxy-all https://www.rottentomatoes.com/ \
--record-mappings \
--root-dir /remote/experiment/record/https \
--verbose
这里是提取:
wget -e use_proxy=yes -e http_proxy=proximate-proxy:9000 \
https://www.rottentomatoes.com/
WireMock 的结果是创建了内部缓存目录,但它们不包含任何内容:
/ # ls -R /remote/experiment/record/https
/remote/experiment/record/https:
__files mappings
/remote/experiment/record/https/__files:
/remote/experiment/record/https/mappings:
我在 Docker 容器中的 Alpine 3.4 上使用 WM 2.4.1。我是否需要使用某些 https
特定的命令行开关才能使其正常工作?
更新
看到最近发布的 2.5.0 最近合并了 https-bind-address-bug
,我暂时感到振奋,这听起来很相关。我试过这个版本,但不幸的是它没有任何区别。
这已部分解决 - 我的主要错误是为 WireMock 和客户端分别设置了 HTTPS 连接的代理地址。我现在正在使用:
java \
-jar /var/proximate/wiremock-standalone-2.4.1.jar \
--port 9000 \
--https-port 9050 \
--proxy-all https://www.rottentomatoes.com/ \
--record-mappings \
--root-dir /remote/experiment/record/https \
--verbose \
--print-all-network-traffic
我添加了 --print-all-network-traffic
这样我就可以查看是否有任何 HTTPS 流量正在访问代理(现在是)。
这是新的客户端命令,带有新的代理指令:
wget -e use_proxy=yes -e http_proxy=proximate-proxy:9000 \
-e https_proxy=proximate-proxy:9050 \
--verbose \
--user-agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0" \
https://www.rottentomatoes.com/
但是,现在实际正在使用代理,看起来操作没有成功完成。我已经尝试过其他加密站点并收到相同的模糊错误:
Resolving proximate-proxy... 172.18.0.2
Connecting to proximate-proxy|172.18.0.2|:9050... connected.
Failed reading proxy response: No error information
Retrying.
--2017-01-26 09:20:18-- (try: 2) https://www.rottentomatoes.com/
Connecting to proximate-proxy|172.18.0.2|:9050... connected.
Failed reading proxy response: No error information
Retrying.
--2017-01-26 09:20:20-- (try: 3) https://www.rottentomatoes.com/
Connecting to proximate-proxy|172.18.0.2|:9050... connected.
Failed reading proxy response: No error information
Retrying.
^C
我已经替换了用户代理,以防根据标准 "wget" 字符串出现一些 third-party 拒绝,但这似乎也没有影响。
我会问一个关于这个的新问题,以缩小这是 WireMock 还是 Wget 问题的范围。