[Developers] coldfusion CFHTTP COOKIE "authentication required"

Mark CE markce at btclick.com
Tue Aug 7 19:31:09 UTC 2007


Brilliant, Ryan, that's sorted it; goodbye to "authentication required" error.

On with "Type /type/object does not have property query" !
...solved by passing this:

{"query": [{ etc }]}

instead of:

{"qname":
{"query": [{ etc }]}
}

...and I have results!!!



At 17:38 07/08/2007, Ryan Miller wrote:

>Mark,
>
>Bad news, CF automatically urlencodes the cookie which makes it
>unrecognizable to freebase's api service.  Why they do this I have no
>idea, it's about the worst thing I've ever seen in CF.  Yes, there is
>an attribute for "encoded" but it is ignored on Cookie types.  The
>good news is there is a workaround.
>
><cfhttpparam type="cgi" name="Cookie"
>value="metaweb-user=#metaWebUserValue#;metaweb-user-info:#metaWebUserInfoValue#"
>encoded="no" />
>
>Be sure you're getting just the values out of the login response cookie.
>
><cfset userCookie = cfhttp.responseHeader['set-cookie'][1] />
><cfset metaWebUserParam = listFirst(userCookie, ";") />
><cfset metaWebUserValue = listLast(metaWebUserParam, "=") />
>
><cfset userInfoCookie = cfhttp.responseHeader['set-cookie'][2] />
><cfset metaWebUserInfoParam = listFirst(userInfoCookie, ";") />
><cfset metaWebUserInfoValue = listLast(metaWebUserInfoParam, "=") />
>
>I'm using this on the mqlwrite service and it's not working 100% yet,
>but I'm not getting the failed authentication response anymore either.
>
>
>On 8/7/07, Mark CE <markce at btclick.com> wrote:
> >
> >  changed the email subject to make it more specific
> >
> >  I used your "toString" extraction into my code and the result does come
> > back as "Login Succeeded", so I still think the problem is in what I'm
> > posting to the mqlread service.  In fact the login call returns a success
> > with my plain user name; so apparently email is not necessary.
> >
> >  In fact I have also hard-coded (copied & pasted) the metaweb-user cookie
> > from my browser session into the cookie param for the mqlread 
> call; same 400
> > problem.
> >
> >  What I would be really keen to have is an example of working code for this
> > part:
> >
> >  <cfhttp url="http://www.freebase.com/api/service/mqlread"
> > method="POST">
> >       <cfhttpparam name="q" value="something that works here"
> > type="FORMFIELD">
> >       <cfhttpparam name="metaweb-user"
> > value="A|u_mycookie|g_...etc...Kug" type="COOKIE">
> >  </cfhttp>
> >
> >  I have tried adding this:
> >  <cfhttpparam name="Content-Type"
> > value="application/x-www-form-urlencoded" type="header" />
> >  but it makes no difference.
> >
> >  I have also tried the request with the "q" cfhttpparam on its own without
> > the cookie.
> >  And with the cookie cfhttpparam on its own without the q parameter.
> >  And with a dummy param, leaving out both q and cookie.
> >
> >  Same result every time.
> >
> >  One potential problem is that my cookie has a "#" in it.
> >  I resolved this by replacing it with "##" which is the usual practice for
> > escaping "#" in CF.
> >
> >
> >  Mark CE
> >
> >
> >  At 04:48 07/08/2007, Ryan Miller wrote:
> >
> >
> > Mark,
> >
> >  I was playing with the MQL Write services this afternoon and saw their
> >  example of using the login API, what you were tryin to do with the
> >  first http post in your code.  After messing around I figured out that
> >  the username needs to be your email address.  I also used a chttp
> >  param to specify the content type.  The returned content is a JSON
> >  string but CF turns it into a Java ByteArrayOutputStream.  Just use
> >  it's toString() method to see if the login succeeds (metaweb always
> >  returns a 200 status, even if the login fails, you need to inspect the
> >  JSON string to know if it succeeded.
> >
> >  <cfhttp URL=" http://www.freebase.com/api/account/login"
> > method="POST">
> >       <cfhttpparam name="Content-Type"
> >  value="application/x-www-form-urlencoded" type="header" />
> >       <cfhttpparam name="username" value="myaddy at gmail.com" 
> type="formfield"
> > />
> >       <cfhttpparam name="password" value="mypassword" type="formfield" />
> >  </cfhttp>
> >  <cfdump var="#cfhttp.filecontent.toString()#" />
> >
> >
> >  On 8/6/07, Ryan Miller <ninjascience at gmail.com> wrote:
> >  > from what I can tell you're trying to do an HTTP POST to the freebase
> >  > site with your username and password sent as POST variables, getting
> >  > the metaweb-user cookie out of that response, than using that to do
> >  > your mql POST.  Why not just lookup your metaweb-user cookie value out
> >  > of your browser and hard-code into your app?  When I tried your code
> >  > the first POST that should return the cookie doesn't, so if you want
> >  > to keep going this route, concentrate there.  Make sure your sending
> >  > the vars under the right names (including case), and fake the
> >  > user-agent string to a common browser.
> >  >
> >  > On 8/6/07, Mark CE <markce at btclick.com> wrote:
> >  > >
> >  > >
> >  > >  Don't worry I have tried both POST and GET, many times now!
> >  > >
> >  > >  Two crappy CF templates attached (testme.cfm which calls 
> testme2.cfm).
> >  I
> >  > > am not familiar with this list; if it doesn't accept attachments and I
> >  > > should be including the code in the body of this email, I guess I'll
> > find
> >  > > out when my message comes back.
> >  > >
> >  > >  Needless to say, the cookie-getting function does work and
> > successfully
> >  > > returns the two cookies:
> >  > >  metaweb-user and metaweb-user-info.
> >  > >
> >  > >  -----------------------
> >  > >  Originally I wasn't deserialising the JSON response so hence the
> > unhelpful
> >  > > error message.
> >  > >  Now the response is:
> >  > >
> >  > >  code: /api/status/error/input/invalid
> >  > >  message: authentication required
> >  > >  ----------------------
> >  > >
> >  > >  Thanks again
> >  > >  Mark
> >  > >
> >  > >
> >  > >
> >  > >  At 16:34 06/08/2007, you wrote:
> >  > >
> >  > >
> >  > > In addition to the cookie requirement, you probably need to do your
> >  > >  cfhttp call as a POST, cfhttp is a GET by default.  If that doesn't
> >  > >  work post your cfhttp code here to the list.
> >  > >
> >  > >  On 8/6/07, Mark CE <markce at btclick.com> wrote:
> >  > >  >
> >  > >  >
> >  > >  >  Hello there,
> >  > >  >  Has anyone successfully retrieved a query result from Freebase
> > using
> >  > >  > Coldfusion CFHTTP?
> >  > >  >  Or know of a reason why mine would return a 400 error?
> >  > >  >
> >  > >  >  HTTP/1.0 400 Bad Request X-Metaweb-Cost: dt=0.001, nreqs=0 Date:
> > Fri, 03
> >  > >  > Aug 2007 16:10:49 GMT X-Metaweb-TID:
> >  > >  >
> > cache;cache01.p01.sfo1:8101;2007-08-03T16:10:49Z;0002
> >  > >  > Server: Apache/2.0.58 Vary: Accept-Encoding Cache-Control: no-cache
> >  > >  > Content-Type: applic
> >  > >  >
> >  > >  >  If instead of CFHTTP I get my coldfusion code to output the URL to
> > the
> >  > >  > page; I copy and paste into the address bar, I get a 200 
> response...
> > and
> >  > > the
> >  > >  > query results I would expect.
> >  > >  >
> >  > >  >  Working code samples gratefully received!!!
> >  > >  >  Thanks
> >  > >  >  Mark CE
> >  > >  >
> >  > >  >
> >  > >  >
> >  > >  >  ________________________________
> >  > >  >  Mark Christian-Edwards
> >  > >  >  markce at btclick.com
> >  > >  >
> >  > >  >
> >  > >  >
> >  > >  >
> >  > >  > _______________________________________________
> >  > >  > Developers mailing list
> >  > >  > Developers at freebase.com
> >  > >  >
> > http://lists.freebase.com/mailman/listinfo/developers
> >  > >  >
> >  > >  >
> >  > >
> >  > >
> >  > >
> >  > >  --
> >  > >  No virus found in this incoming message.
> >  > >  Checked by AVG Free Edition.
> >  > >  Version: 7.5.476 / Virus Database: 269.11.6/938 - Release Date:
> > 05/08/2007
> >  > > 16:16
> >  > >
> >  > >
> >  > > No virus found in this outgoing message.
> >  > > Checked by AVG Free Edition.
> >  > > Version: 7.5.476 / Virus Database: 269.11.6/938 - Release Date:
> > 05/08/2007
> >  > > 16:16
> >  > >
> >  > >
> >  > >
> >  >
> >
> >
> >
> >  --
> >  No virus found in this incoming message.
> >  Checked by AVG Free Edition.
> >  Version: 7.5.476 / Virus Database: 269.11.6/938 - Release Date: 05/08/2007
> > 16:16
> >
> >
> > No virus found in this outgoing message.
> > Checked by AVG Free Edition.
> > Version: 7.5.476 / Virus Database: 269.11.6/938 - Release Date: 05/08/2007
> > 16:16
> >
> >
>
>
>
>--
>No virus found in this incoming message.
>Checked by AVG Free Edition.
>Version: 7.5.476 / Virus Database: 269.11.8/940 - Release Date: 
>06/08/2007 16:53


-- 
No virus found in this outgoing message.
Checked by AVG Free Edition. 
Version: 7.5.476 / Virus Database: 269.11.8/940 - Release Date: 06/08/2007 16:53




More information about the Developers mailing list