在invoke-webrequest期间强制在powershell上使用UTF-8

时间:2012-07-24 02:31:39

标签: xml powershell encoding

我试图使用“invoke-webrequest”CMDLET来调用Web服务。 我成功地使用它与apache tomcat服务的WSDL,但当我使用它对glassfish 2我得到:

--- Invoke-WebRequest:'“utf-8”'不是受支持的编码名称.---

我的请求很好地在SOAP UI中工作,但是使用SOAP UI我意识到Glassfish V2正在设置带双引号的UTF-8编码(请参阅上面的错误并给出线索)。 Apache Tomcat做得很好,它为我提供了没有双引号的编码。

你是如何处理的?是否有任何方法可以动态删除这些双引号或者在CMDLET调用期间完全替换编码? 我可以在文档中找到对此的任何引用。

谢谢!

1 个答案:

答案 0 :(得分:1)

Invoke-WebRequest只是为您设置一个普通的旧HTTP标头/正文请求。您确定要使用包含所有正确XML命名空间等的标题和正文创建正确的信封吗?我并不是说你不能这样做,但总的来说,使用New-WebServiceProxy来创建针对服务的WSDL的代理可能更容易。

如果您仍想这样做,只需传入一个哈希表,其中包含您要使用的所有标题,包括设置字符集的标题,例如:

Invoke-WebRequest ... -Headers @{Host = 'www.xxxx.xxx';
                                 Content-Type = 'application/soap+xml; charset=utf-8';
                                 Content-Length = <length>;
                                 SOAPAction = 'http://www.w3.org/2003/05/soap-envelope;
                                 ...}