This is seriously driving me nuts!!
The exact same request succeeds when I format it as a curl statement, but gets a 404 when using cfhttp to make the request.
Coldfusion
<cfhttp method="POST" result="stepsResponse"
url="https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate">
<cfhttpparam type="header" name="Authorization" value="Bearer #ACCESS_TOKEN#">
<cfhttpparam type="header" name="Content-Type" value="application/json;encoding=utf-8">
<cfhttpparam type="body" value='{"bucketByTime":{"durationMillis":86400000},"endTimeMillis":1678950000000,"startTimeMillis":1678863600000,"aggregateBy":[{"dataSourceId":"derived:com.google.step_count.delta:com.google.android.gms:estimated_steps","dataTypeName":"com.google.step_count.delta"}]}'>
</cfhttp>
Curl
curl \
-X POST \
-H "Content-Type: application/json;encoding=utf-8" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{"bucketByTime":{"durationMillis":86400000},"endTimeMillis":1678950000000,"startTimeMillis":1678863600000,"aggregateBy":[{"dataSourceId":"derived:com.google.step_count.delta:com.google.android.gms:estimated_steps","dataTypeName":"com.google.step_count.delta"}]}' \
https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate
Why? Why? Why?
Strangely, when I call the endpoint directly in the browser I get a 404 as well. I'm fairly certain there is something (easy) that I'm overlooking, but I've been staring at this for hours over the past couple days and cannot see where I'm going wrong. I sincerely hope someone out there sees the problem. I'm grateful for your time!
Google Developer Guide — Read Daily Steps Total
Update: JavaScript Works TOO! Why won't CFHTTP?!
2023-03-18: I've tested this using JavaScript's fetch method as well and it works. No 404. I just don't understand why the same URL fails in CFHTTP?!
fetch('https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate', {
method: 'POST',
headers: {
'Authorization': '#ACCESS_TOKEN#',
'Content-Type': 'application/json;encoding=utf-8'
},
body: '{"bucketByTime":{"durationMillis":86400000},"endTimeMillis":1678950000000,"startTimeMillis":1678863600000,"aggregateBy":[{"dataSourceId":"derived:com.google.step_count.delta:com.google.android.gms:estimated_steps","dataTypeName":"com.google.step_count.delta"}]}'
})
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
Update: stepsResponse Screenshot
2023-03-22: at the request of @CFMLBread and @TRose, here's a screenshot of the stepsResponse.