【问题标题】:cfhttp returns 415 Unsupported Media Type on CF9cfhttp 在 CF9 上返回 415 Unsupported Media Type
【发布时间】:2013-02-18 23:18:31
【问题描述】:

以下代码在 CF10 上运行良好。

httpSvc = New http();
httpSvc.setMethod("post"); 
httpSvc.setCharset("utf-8"); 
httpSvc.setUrl(svcLocation);
httpSvc.setClientCert(certLocation);
httpSvc.setClientCertPassword(certPassword);
httpSvc.addParam(type="body", name="body",value=requestParameters);
result = httpSvc.send().getPrefix();

requestParameters 的值为:

<?xml version="1.0" encoding="UTF-8"?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Body> 
<ns2:processCreditCard xmlns:ns2="urn:com.qvalent.payway.api"> 
<requestParameters>customer.orderNumber=5396&amp;card.CVN=070&amp;order.amount=101&amp;customer.merchant=xxxx&amp;card.expiryMonth=08&amp;card.expiryYear=20&amp;order.ECI=SSL&amp;card.PAN=0000000000000008&amp;card.currency=AUD&amp;customer.username=xxxxxx&amp;order.type=capture&amp;customer.password=xxxxxxx</requestParameters> 
</ns2:processCreditCard> 
</S:Body> 
</S:Envelope>

但是,当我将它放在 CF9 服务器上时,响应 FileContent 为空,我得到以下状态代码:

415 Unsupported Media Type

这是显示完整回复的链接:http://www.onoffezy.com/_testing/gateway/

Trawling Google,415 状态代码表明客户端请求的 mime 类型在服务器上不可用。但是,我找不到可以为请求设置 mime 类型的任何地方。 cf9 和 cf10 的默认 mimetype 有区别吗?

我仔细查看了这两个版本的文档,但找不到可以解释这一点的差异。

如果有人能对此有所了解并让我知道我需要在 CF9 上做些什么不同的事情,将不胜感激。

非常感谢

【问题讨论】:

    标签: http coldfusion coldfusion-9


    【解决方案1】:

    感谢所有帮助。我发现了问题。

    httpSvc.addParam(type="body", name="body",value=requestParameters);
    

    需要改成:

    httpSvc.addParam(type="xml", name="body",value=requestParameters);
    

    似乎 cf9 以二进制形式发送 type='body',但 cf10 将其作为字符串发送,或者将其视为 xml 并按此方式处理。一旦我将类型更改为“xml”,cf9 就开始将其作为 xml 字符串发送,而不是二进制。

    【讨论】:

    • 很高兴你明白了。
    【解决方案2】:

    虽然我不能肯定这会解决您的问题,但您是否尝试过将“接受”请求标头设置为响应的内容类型?

    例如:

    acceptType = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" httpSvc.addParam(name="Accept", value=acceptType, type="header");

    【讨论】:

    • 谢谢臭朋友。按照您的建议尝试,但反应相同。我添加了一个链接来查看原始问题中的完整回复。也许那里还有其他东西。谢谢
    【解决方案3】:

    根据documentation here type="body" 指定HTTP请求的主体。 ColdFusion 不会自动设置内容类型标头或 URL 编码正文内容。要指定内容类型,请使用带有 type=header 的单独 cfhttpparam 标记。 因此,为您的请求指定此标头可能会有所帮助。

    类似:

    httpSvc.addParam(type="header", name="Content-Type", value="application/x-www-form-urlencoded");
    

    您没有提供正文内容的示例。您可能必须使用特定内容类型的值。 Here is a list of the available MIME types

    您在示例中的变量requestParamaters 中拼错了单词参数。它的价值是什么?

    【讨论】:

    • 嗨 Miguel,我想你让我专注于正确的领域。当我设置 Content-Type 时,我现在也收到 cf10 的相同错误。所以 cf9 和 cf10 的错误相同。所以朝着正确的方向前进。我正在发送 SOAP XML,因此使用了其他值,例如 application/soap+xml,但仍然得到“415 Unsupported Media Type”。
    • 另外,我在原始问题中包含了 requestParamaters 的值。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2014-01-21
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多