2012-08-06 2 views
2

나는 cfhttp.responseHeader의 내용을 읽는 방법을 알아 내려고 노력하고 있습니다. 나는 응답의 쿠키 몇을 보내는 웹 사이트에 액세스하려고합니다. 나는 응답에서 그들을 추출해야합니다. 이후의 모든 요청과 함께 쿠키 값을 보냅니다. 나는 코드 아래에 사용하려 :Coldfusion CFHTTP.Responseheader

<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> 

답변

3

다음과 같은 오류가 발생합니다 :

<cfset cookies = cfhttp.responseHeader["set-cookie"] /> 

<cfdump var="#cookies#" /> 

그런 다음 사용할 수 있습니다 그 쿠키는 데이터를 구조화하여 후속 요청을합니다.

0

문제는 구조체를 반복 처리하지만 배열로 처리하려고하는 것입니다. 구조를 반복하려면 "콜렉션"을 사용해야합니다.

<cfloop collection="#cfhttp.responseHeader['set-cookie']#" item="sKey"> 
    ..... 
</cfloop> 
0

다음은 Ben Nadel 웹 사이트의 참조를 사용하여 헤더 쿠키를 얻으 려 한 스크립트입니다.

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; 
}