诊断连接问题
没有更多细节很难说,但考虑到你的超时错误:
Failed to establish a new connection: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time.
这表示 TCP 级别的网络连接错误,因此很可能 Web 服务在您使用的端口上未激活(http 的默认值为 80,https 的默认值为 443)。
在评论中您说您 ping 了 URL 并且它正常响应 - 我认为这意味着您 ping 了主机名。如果它正常响应,则表示服务器处于活动状态,但这并不能告诉您有关该服务器上 Web 服务可用性的任何信息。
telnet %hostname% %port%
其中 %port% 对于 http 是 80,对于 https 是 443,或者如果您正在使用的 URL 中有端口号(例如 http://somehost.somewhere.com:port/path.scv)
如果 ping 正常但 telnet 未连接,则服务未激活。
我怀疑是这种情况。如果服务处于活动状态并且只是您错误地请求数据,我相信您会收到不同的错误消息 - 例如状态码为 500 或 404 或类似的有效 HTTP 响应。
从 Web 服务获取数据
关于如何从中获取数据的原始问题 - 一旦您验证服务处于活动状态,获取数据的方法将取决于服务的规范 - 即:
- 它支持哪些 HTTP 方法(GET、POST 等)
- 需要什么参数
- 需要什么格式的参数
- 是query string或POST body中的参数。
要与 Web 服务交互,可以使用许多命令行工具,以及您尝试过的选项,包括:
从 SOAP Web 服务获取数据
正如您所说,它是一个 SOAP Web 服务,如果您有 wsdl 的 URL,您通常可以使用 Powershell SOAP WebService Proxies 与它进行交互。
wsdl 的位置各不相同,但通常位于类似的 URL。
此外,如果配置正确,只需在浏览器中加载 URL 就会显示一个带有 wsdl 链接的页面。
大体思路是:
$URI="http://hostname/path.svc?wsdl"
$Proxy = New-WebserviceProxy $URI –Namespace X
$Proxy | get-member -MemberType Method
这将返回代理上的方法列表,您可以将其作为 powershell 方法调用。 wsdl 中定义的参数所需或从方法返回的任何类型都将在命名空间 X 中可用。调用方法会将请求代理到服务,负责将参数序列化并将结果序列化为 powershell 对象。