【问题标题】:Convert SoapUI Request into CFHTTP将 SoapUI 请求转换为 CFHTTP
【发布时间】:2016-05-12 16:01:21
【问题描述】:

我正在查看 SoapUI 中的请求,该请求将标头信息发送到特定端点,但我很难在 ColdFusion 中重新创建它。

以下是 SoapUI 中 RAW 请求的样子:

>> "GET https://test-01.mywebsite.com/data_api//1.0/service/requests HTTP/1.1[\r][\n]"
>> "Accept-Encoding: gzip,deflate[\r][\n]"
>> "Authorization: Bearer A1BEC30F7E0273059E775A6A2645E273[\r][\n]"
>> "Host: test-01.mywebsite.com[\r][\n]"
>> "Connection: Keep-Alive[\r][\n]"
>> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]"
>> "[\r][\n]"
<< "HTTP/1.1 200 OK[\r][\n]"
<< "Pragma: No-cache[\r][\n]"
<< "Cache-Control: no-cache[\r][\n]"
<< "Expires: Wed, 31 Dec 1969 16:00:00 PST[\r][\n]"
<< "Content-Type: application/json;charset=UTF-8[\r][\n]"
<< "Content-Length: 6796[\r][\n]"
<< "Date: Fri, 13 May 2016 15:40:08 GMT[\r][\n]"
<< "Server: hws[\r][\n]"
<< "Set-Cookie: X-HR-ClientSessionId=2_10.85.12.121_1463154008475;Secure; path=/; HttpOnly[\r][\n]"
<< "Content-Encoding: deflate[\r][\n]”

我不确定我是否没有正确格式化 Authorization 标头,或者任何帮助都会很好。

EDIT 我从上面更新的客户端得到了一个 RAW HTML 输出。我仍在尝试在 ColdFusion 中重新创建该标题。

我的新问题:“换行”字符是否会影响标题值?我还应该为内容类型添加一个参数吗?

我确实尝试了以下方法:

<cfset NL="Bearer BD4DF031B24180C9338F0D9F060556A7" & Chr(10) & Chr(13)/>

<cfhttp method="get" url="https://test-01.mywebsite.com/data_api//1.0/service/requests" result="orderList">
    <cfhttpparam type="HEADER" name="Authorization" value="#NL#">
    <cfhttpparam type="Header" name="Accept-Encoding" value="gzip,deflate">
</cfhttp>
<cfset CurrentOrders = deserializeJSON(orderList.filecontent)>

<cfdump var="#CurrentOrders#">

当我从 cfhttp 调用中转储所有内容时,我得到:

struct
Charset     UTF-8
ErrorDetail     [empty string]
Filecontent     Connection Failure
Header  HTTP/1.1 200 OK Connection: close Expires: Wed, 31 Dec 1969 16:00:00 PST Date: Tue, 17 May 2016 19:23:36 GMT Server: hws Pragma: No-cache Cache-Control: no-cache Set-Cookie: X-HR-ClientSessionId=3_12.161.115.226_1463513016026;Secure; path=/; HttpOnly Content-Type: application/json;charset=UTF-8
Mimetype    application/json
Responseheader  
struct
Cache-Control   no-cache
Connection  close
Content-Type    application/json;charset=UTF-8
Date    Tue, 17 May 2016 19:23:36 GMT
Expires     Wed, 31 Dec 1969 16:00:00 PST
Explanation     OK
Http_Version    HTTP/1.1
Pragma  No-cache
Server  hws
Set-Cookie  X-HR-ClientSessionId=3_12.161.115.226_1463513016026;Secure; path=/; HttpOnly
Status_Code     200
Statuscode  200 OK
Text    NO

我收到 200 OK 状态代码,但仍然收到连接失败。

【问题讨论】:

  • 不确定我是否遵循了某些问题之外的确切问题;-) 1) 首先,首先从 cfhttp 转储完整响应。什么是完整的错误信息? 2)为了澄清你说的是来自 SoapUI succeeds 的“原始请求”,但 cfhttp 没有? 3)cfhttp“RAW request”长什么样子,两者有什么不同?
  • 我会用你上面提到的信息更新我的问题。谢谢。\
  • 我已经从 cfhttp 请求中添加了 orderList 的完整输出。我很难在最后查看原始标头,因为当我将请求发送到本地文件时,授权标头会将其丢弃,因为我必须添加本地用户名和密码才能访问测试页面。是的,SoapUI 确实成功了,上面是 Raw html。 CFHTTP 请求不成功。如果有什么具体的我可以运行和输出,请告诉我。
  • 必须添加我的本地用户名和密码才能访问测试页面。您是使用 Fiddler 调试 CFHTTP 请求(最好)还是只是将请求发送到测试页面你的本地服务器?
  • NTLM,还有另一个问题可能是什么。 NTLM 身份验证与基本身份验证不同。

标签: coldfusion http-headers cfhttp


【解决方案1】:

您似乎对安全令牌进行了双重加密。 我修改了您的代码,以便可以按照Leighs Answer 使用 Fiddler 捕获请求。为了让 ColdFusion 通过 Fiddler 发送流量,我修改了 http 的 Dmitri Pisarenko 答案并将其添加到我的 JVM 参数中。

<cfhttp method="get" url="http://localhost/data_api/1.0/service/requests" result="orderList">
    <cfhttpparam type="HEADER" name="Authorization" value="Basic #ToBase64("Bearer 6EDC52118E164AE659EA2C772F3B9804")#">
    <cfhttpparam type="Header" name="Accept-Encoding" value="gzip,deflate">
</cfhttp>

我离开cfhttp 请求的结果是:

GET http://localhost/data_api/1.0/service/requests HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip,deflate
Connection: close
Authorization: Basic QmVhcmVyIDZFREM1MjExOEUxNjRBRTY1OUVBMkM3NzJGM0I5ODA0
Host: localhost
Connection: Keep-Alive

如您所见,Authorization 标头与 SoapUI 创建的不同。

我将 Authorization 参数的值修改为:"Bearer 6EDC52118E164AE659EA2C772F3B9804",并且我得到了一个带有与来自 SoapUI 的原始标头匹配的身份验证标头的标头:

GET http://localhost/data_api/1.0/service/requests HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip,deflate
Connection: close
Authorization: Bearer 6EDC52118E164AE659EA2C772F3B9804
Host: localhost
Connection: Keep-Alive

【讨论】:

  • 是的。看起来该值已经编码为十六进制,因此正如 Twillen 所说,不需要调用 toBase64。另外,我也不确定是否需要“基本”前缀。
  • 感谢 Twillen 的详细回答我现在正在实施这些更改,并将很快跟进。 +1
  • @Twillen & Leigh 我用从客户那里得到的新原始 html 更新了我的问题,我试图用相同的结果更新我的coldfusion。我想知道你是否看到我可能遗漏的任何东西。谢谢。
  • @Denoteone 弹出的是 Set-Cookie。我重读了我回答的最后一个问题,我认为这个 API 也可能使用会话管理,所以你需要传回 cookie。我现在还假设您在获得另一个密钥后第二次请求失败。我看到 Ben Nadel 有一个write up,关于如何传回 cookie。如果这是正确的假设,我也可以更新我的答案。
  • Twillen 这是正确的我的第一个请求我得到了一些 JSON,这是您在“Bearer”之后看到的 Auth Token。让我看看那篇关于发回 cookie 的帖子。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2021-06-30
  • 2018-04-16
  • 1970-01-01
  • 2021-02-06
  • 2017-01-13
相关资源
最近更新 更多