我正在尝试解析一个 WSDL 文件,该文件位于另一台服务器中,但在整个文档中都硬编码了“localhost”。
当我获取它时,显然程序抱怨“连接被拒绝”,因为我的机器上没有运行任何东西。
我的问题是:是否可以使用 webproxy(例如 fiddler)将这些 localhost 请求重定向到我的其他服务器,以便 WSDL 引用完整?
:-/
谢谢
ps 我本可以一直修好远程“wsdl”,但负责人将在这里直到下周,我想从今天开始工作。
我正在尝试解析一个 WSDL 文件,该文件位于另一台服务器中,但在整个文档中都硬编码了“localhost”。
当我获取它时,显然程序抱怨“连接被拒绝”,因为我的机器上没有运行任何东西。
我的问题是:是否可以使用 webproxy(例如 fiddler)将这些 localhost 请求重定向到我的其他服务器,以便 WSDL 引用完整?
:-/
谢谢
ps 我本可以一直修好远程“wsdl”,但负责人将在这里直到下周,我想从今天开始工作。
您可以使用 Fiddler 作为您机器的代理,然后让它重写 WSDL 以将 localhost 更改为正确的机器名称。
FiddlerScript CookBook有一个关于如何编写此类脚本的示例。转到该页面并搜索“删除所有 DIV 标记(以及 DIV 标记内的内容)”。只需更改正则表达式以匹配 localhost 并将替换设置为您要使用的机器名称。
如果您对机器有 SSH 访问权限,您应该能够使用 SSH 端口转发来完成此操作。我假设您使用的是 Windows(基于 C# 标记),因此您可以使用 Putty,如下所述:Using port forwarding with PuTTY。只需按照这些说明将“localhost”上的所需端口转发到为 WSDL 提供服务的服务器。
或者,如果您使用的是基于 *nix 的机器或 Mac,请使用带有以下命令的 SSH:
ssh -L PORTYOUWILLUSE:localhost:PORTONSERVER username@serverhostname
例如,如果 WSDL 在端口 80 上提供服务,您可以这样做
ssh -L 80:localhost:80 username@server
登录后(使用任一方法),对端口 80 上的 localhost 的任何请求都将被重新路由到服务器。
如果您只想在解析 WSDL 时更改它几分钟,您可以更改 HOST 文件并将“localhost”指向远程 IP 地址。hosts 文件位于 Windows VISTA/XP 的“C:\Windows\System32\drivers\etc”中。
有几种方法可以实现这一点,没有一种作为长期解决方案特别强大,但你提到你只想要一些暂时的东西,直到开发人员回来。
如果域之后的所有内容都匹配(如果您的远程 URL 与本地主机相同),您可以在主机文件中编辑本地主机条目。
在 system32\drivers\etc 中,将“hosts”文件复制到您的桌面上。在记事本中打开并更改此行:
127.0.0.1 localhost
将 IP 地址 (127.0.0.1) 更改为您的远程域。然后将hosts文件复制回etc目录。(注意:无论以管理员身份还是其他身份,都无法直接编辑此文件)。
如果您在远程 Web 服务上有多个域,在 IIS 中,您需要更改网站以提供对“localhost”的请求,这可能看起来有点奇怪,但它会起作用,因为您的机器会向服务器的 IP 地址,但将请求域指定为“localhost”。右键单击 IIS 中的网站并选择属性,然后将域“localhost”添加到该网站支持的 HTTP-Header 值列表中。如果您通过 IP 地址访问 IIS 中的网站将提供内容,则您可以忽略所有这些。如果该单个 IP 地址在多个网站之间共享(通常是这种情况),您将从 IIS 收到“错误主机名”错误,因为它试图查找“localhost”并且找不到要引导的网站请求。
另一种可能性是使用名为Proxomitron的个人代理服务器。它有点旧,不再处于开发阶段,但它很容易设置并且非常可靠。
安装完成后,打开它并单击“配置” - 将它侦听的端口更改为 80。接下来您需要创建一个重定向规则(它实际上不是重定向,更多的是对 url 的重写)。您需要快速阅读文档以了解如何添加自己的重定向,但该应用程序附带了大量示例。您正在寻找的规则是 RDIR:
$RDIR( ) 更加狡猾,它会在 Proxomitron 中重定向连接而不告诉您的浏览器。当您希望浏览器认为它在一个地方,而实际上它在另一个地方时,这很有用。