我正试图弄清楚如何读取cfhttp.responseHeader的内容,简直要发疯了。我正在尝试访问一个网站,该网站在响应中发送了几个cookie。我需要从响应中提取它们。然后将Cookie值与所有将来的请求一起发送。我尝试使用以下代码:
<cfloop collection = #cfhttp.responseHeader# item = "httpHeader">
<cfset value = cfhttp.responseHeader[httpHeader]>
<cfif IsSimpleValue(value)>
<cfoutput>
#httpHeader# : #value#<BR>
</cfoutput>
<cfelse>
<cfloop index = "counter" from = 1 to = #ArrayLen(value)#>
<cfoutput>
#httpHeader# : #value[counter]#<BR>
</cfoutput>
</cfloop>
</cfif>
但这会抛出以下错误
Object of type class coldfusion.util.FastHashtable cannot be used as an array
The error occurred in C:/inetpub/wwwroot/cfdocs/Response.cfm: line 22
20 : </cfoutput>
21 : <cfelse>
22 : <cfloop index = "counter" from = 1 to = #ArrayLen(value)#>
23 : <cfoutput>
24 : #httpHeader# : #value[counter]#<BR> 发布于 2012-08-07 03:25:32
您可以像这样检索cookie:
<cfset cookies = cfhttp.responseHeader["set-cookie"] />
<cfdump var="#cookies#" />然后,您可以使用该cookie结构数据进行后续请求。
发布于 2013-10-28 18:17:47
问题是你试图在一个结构上循环,但却把它当作一个数组。你需要使用“集合”来循环结构。
<cfloop collection="#cfhttp.responseHeader['set-cookie']#" item="sKey">
.....
</cfloop>发布于 2014-11-13 05:46:49
这是我使用Ben Nadel网站上的引用来获取标题cookie的脚本。
public struct function GetResponseCookies(required struct Response){
var LOCAL = {};
LOCAL.Cookies = {};
if(!StructKeyExists(ARGUMENTS.Response.ResponseHeader,"Set-Cookie")){
return LOCAL.Cookies;
}
LOCAL.ReturnedCookies = ARGUMENTS.Response.ResponseHeader[ "Set-Cookie" ];
if(!isStruct(LOCAL.ReturnedCookies)){
return LOCAL.Cookies;
}
for(LOCAL.CookieIndex in LOCAL.ReturnedCookies){
LOCAL.CookieString = LOCAL.ReturnedCookies[ LOCAL.CookieIndex ];
for(LOCAL.Index =1; Local.Index != ListLen( LOCAL.CookieString, ';' ); LOCAL.Index++){
LOCAL.Pair = ListGetAt(LOCAL.CookieString,LOCAL.Index,";");
LOCAL.Name = ListFirst( LOCAL.Pair, "=" );
if(ListLen( LOCAL.Pair, "=" ) > 1){
LOCAL.Value = ListRest( LOCAL.Pair, "=" );
} else {
LOCAL.Value = "";
}
if(LOCAL.Index EQ 1){
LOCAL.Cookies[ LOCAL.Name ] = {};
LOCAL.Cookie = LOCAL.Cookies[ LOCAL.Name ];
LOCAL.Cookie.Value = LOCAL.Value;
LOCAL.Cookie.Attributes = {};
} else {
LOCAL.Cookie.Attributes[ LOCAL.Name ] = LOCAL.Value;
}
}
}
return LOCAL.Cookies;
}https://stackoverflow.com/questions/11834128
复制相似问题