我已经失去了几天这个问题,希望它激发了一个人的想法。
我使用Powershell脚本将几个系统集成在一起。 我连接到的两个服务(托pipe的JIRA)中的一个可以从我的本地系统访问,但是从我的一个虚拟机运行时脚本会失败。 我偶然发现,如果我在服务器上为该主机的HTTPS URL打开/刷新了一个浏览器,那么脚本将能够通过HTTPS访问API约20-30秒。
当我远程进入服务器并从PowerShell控制台尝试此操作时收到超时错误。 然后我validation了与cUrl(详细输出如下)一样的行为。 刷新具有该域的浏览器,然后允许在短时间内访问HTTPS URL。 在SSL协商之前,似乎是在初始连接上超时。
代表PoSH命令:
Invoke-RestMethod -Method Get -Uri“ https://MYDOMAIN.atlassian.net/rest/api/2/issue/PLPT-1?fields=key,id,status ”-Headers @ {“Authorization”=“Basic” + [System.Convert] :: ToBase64String([System.Text.Encoding] :: UTF8.GetBytes('USERNAME:PASSWORD'))}
代表cUrl命令:
curl.exe“ https://MYDOMAIN.atlassian.net/rest/api/2/issue/PLPT-1?fields=key,id,status ”-u“USERNAME:PASSWORD”-v -X GET
我已经做了很多挖掘,我很难过。 我尝试过使用Wireshark进行更深入的挖掘,但是使用数据包嗅探器已经有好几年了,而且我很生疏,不得不学习UI。
以下是我在尝试隔离问题时所能想到的问题/答案:
https://google.com/正常工作没有超时 https://localhost/...没有超时工作正常 很短的时间,我以为我已经一直工作。 我正在使用-3 -4来强制SSL3和ipv4地址,它似乎工作,而我不得不主要与networking浏览器的连接。 不幸的是,重新启动后,这不再起作用。
我已经在服务器上尝试过的方法:
这里是一些来自cUrl的示例输出。 我已经有一个浏览器打开到https://MYDOMAIN.atlassian.net (它坐在login屏幕上),但我已经坐了一会儿,所以连接将是陈旧的。
在刷新浏览器之前输出cUrl:
* Hostname was NOT found in DNS cache * Trying 165.254.226.145... * connect to 165.254.226.145 port 443 failed: Timed out * Failed to connect to MYDOMAIN.atlassian.net port 443: Timed out * Closing connection 0
刷新浏览器后立即运行cUrl输出:
* Hostname was NOT found in DNS cache * Trying 165.254.226.145... * Connected to MYDOMAIN.atlassian.net (165.254.226.145) port 443 (#0) * successfully set certificate verify locations: * CAfile: C:\Users\Administrator\AppData\Local\Apps\cURL\bin\curl-ca-bundle.crt CApath: none * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Server hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS handshake, Server key exchange (12): ... rest of handshake and HTML for a 401 error page because I didn't force pre-authentication ...
我将Wireshark结果添加到上面的问题。
我现在也发现,如果我运行cUrl命令,并在它超时之前取消它,并立即再次运行,它是成功的。 如果我让cUrl命令超时,立即再次运行它,它会再次超时。
如果我运行PoSH命令,并在它超时之前取消它,并立即再次运行,我可以成功地连续运行5次以上。
这确实是一个networking相关的东西,我要看看如果重新运行命令最终会达到一个点,它再次超时,或者如果取消第一个电话以某种方式让我继续进行后续调用,只要我可以(这可能是可能的,我认为PoSH在初始连接形成之后利用保持活力)。
我的临时“解决scheme”是在初始调用时使用短暂的超时,如果失败则立即重试。 超时时间足够短,在这台服务器上它失败,然后再次重试足够快,成功开始通信(就像当我手动运行它,取消它,然后再次运行)。
到目前为止,它看起来像有一个超时,重试是足够好的,以保持自动化脚本的其余部分的连接工作没有问题。
这是一个解决方法,我仍然在寻找根本原因和更好的答案。