I can make the oauth request using curl but using axios I get a error about missing consumer key
X-Error
Missing consumer key.
This happens in the OPTIONS phase of making the request.
axios({
method: 'post',
url: 'https://getpocket.com/v3/oauth/request',
data: {
'consumer_key': 'xxxx-xxxxxxxxxxxxxxx',
'redirect_uri': 'http://localhost:8080/'
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
Here is the curl request
curl https://getpocket.com/v3/oauth/request --insecure -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d "{\"consumer_key\":\"xxxx-xxxxxx\",\"redirect_uri\":\"http://localhost:8080/\"}"
Try adding the headers to your request for it to accept json:
axios({
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
url: 'https://getpocket.com/v3/oauth/request',
data: {
'consumer_key': 'xxxx-xxxxxxxxxxxxxxx',
'redirect_uri': 'http://localhost:8080/'
}
});
Related
Below is the following code I am using to access a remote server:
axios({
method: 'post',
url: 'SERVER URI',
data: {"key1": "val1","key2": "val2"},
headers: {
'Authorization': 'Bearer ${token}',
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then((res) => {
console.log('Response **', res);
resolve(res.data);
}).catch(err => {
console.log('Error from server is ***', err.response);
reject(err.response.data);
});
here token is an oauth2 bearer token using client credentials as grant-type. I am getting a 404 response for this with data: {message: ''}. But I tried the same in postman as well as with a curl request. For both these instances, I got back a valid 200 response.
I am attaching the curl request also,
curl --location --request POST 'URI' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{"key1": "val1","key2": "val2"}'
I may be overlooking something but I am going crazy as to not understanding what I am missing. Any help for this is appreciated
You can try to use formData like that:
const data = new FormData()
data.append('key1', 'val1')
data.append('key2', 'val2')
axios({
method: 'post',
url: 'SERVER URI',
data: data,
headers: {
'Authorization': 'Bearer ${token}',
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then((res) => {
console.log('Response **', res);
resolve(res.data);
}).catch(err => {
console.log('Error from server is ***', err.response);
reject(err.response.data);
});
A 404 response makes me think that maybe the url has a typo in it, but I have seen APIs that respond with 404 as a security measure when authorization fails so it could be a bad Authorization header, too.
There's a typo in the code sample from the original question:
headers: {
'Authorization': 'Bearer ${token}',
...
}
the single quotes surrounding the Bearer ${token} would need to be changed to backticks in order for the template string to actually be expanded.
As it is now, the Authorization header is actually being sent with the literal string ${token} as your token.
I am trying to adapt this curl request to run in Axios but I keep getting an error "Header Validation Failure". What is wrong with my authentication?
Original Curl:
curl -X POST www.website.com
-H "Content-Type: application/json"
-u 'XXX:YYY'
-d $'{
datastring
}'
Axios:
axios({
method: 'post',
url: 'www.website.com',
data: dataString,
headers: {
'Content-Type': 'application/json',
'Authorization': \`Basic 'XXX:YYY'`
}
}).then((response) => {
alert(response);
});
I am trying to create a POST request in my reactjs app based on the following API request example:
Example API request
curl -X "POST" -H "Authorization: Basic ZjM4ZjAw...WY0MzE=" -d grant_type=client_credentials https://accounts.spotify.com/api/token
I'm supposed to be base64 encoding the text following "Basic" within the header.
How do I create this request in javascript using axios? This is what I have so far:
async componentDidMount() {
const encodedString = new Buffer('1ff56abe7792f426ea41a771d707d6690:1b2cca2dedd3949b0a6c5e1582446c9c5').toString('base64');
const [initSpotResponse] = await Promise.all([
axios.post('https://accounts.spotify.com/api/token', { headers: { 'Authorization': `Basic ${encodedString}` } })
]);
}
How do I include the "grant_type=client_credentials" part?
According to axios’ README, this is the Request method aliases for POST requests
axios.post(url[, data[, config]])
axios.post('https://accounts.spotify.com/api/token',
{ data: { grant_type: ‘client_credentials’} },
{ headers: { 'Authorization': `Basic ${encodedString}` } }
)
You could also do
const options = {
url: ‘https://accounts.spotify.com/api/token',
method: 'POST',
headers: { 'Authorization': `Basic ${encodedString}` },
data: { grant_type: ‘client_credentials’}
};
axios(options);
I have an application that returns a buffer with a Http request. When I run curl in my terminal I get a proper response:
Curl:
curl -s -X GET \ "url" \ -H "authorization: Bearer token" \ -H "content-type: application/json"
Response:
Pendiente now has [{"Key":"73ef53d2848708ae3288db3afb69ee85a663eba2ab147e83494f65585d171a2d","Record":{"cantidad":"100","docType":"fabricacion","estado":"Pendiente","id":"73ef53d2848708ae3288db3afb69ee85a663eba2ab147e83494f65585d171a2d","mercado":"dercadona","owner":"jose","producto":"manzanas","usuario":"jose"}},{"Key":"9b2d52becf9620971c7fd31c54b817533157cb2c7186dd3835f4c502742418b5","Record":{"cantidad":"200","docType":"fabricacion","estado":"Pendiente","id":"9b2d52becf9620971c7fd31c54b817533157cb2c7186dd3835f4c502742418b5","mercado":"mercadona","owner":"jose","producto":"peras","usuario":"jose"}}] after the move
I am trying to get the json part from that response with fetch using js (the fetch goes inside another fetch). I've tried different methods but I can't manage to get it properly
return fetch(url_get_tx,{
method: 'get',
headers: {
'Content-type': 'multipart/form-data',
'authorization': 'Bearer '+data.token
}
}
.then(function(data) {
var reader = data.body.getReader();
return reader.read()
console.log("here");
console.log(typeof(reader));
console.log(reader);
})
Many thanks
return fetch(url_get_tx,{
method: 'get',
headers: {
'Content-type': 'application/json'
'authorization': 'Bearer '+data.token
}
})
.then(function(data) {
return data.json()
}).then(result => console.log(result))
I am developing an android app with ionic 2 and I need to send data to a redcap server (https://www.project-redcap.org/, example code to interact with redcap using the provided api http://redcap-tools.github.io/projects/)
I tried to translate from curl commands to http post requests to use in the app and have so far been unsuccesful. For example, I translated the following curl that executes correctly
DATA="token=MY_TOKEN&content=project&format=csv&returnFormat=json"
CURL=`which curl`
$CURL -H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
-X POST \
-d $DATA \
MY_URL
into
this.packet = { token: MY_TOKEN,
content: 'project',
format: 'json',
returnFormat: 'json',
type: 'flat',
data: 'null',
};
this.headers = new Headers({'Content-Type': 'application/json', 'Accept': 'application/json'});
this.http.post(this.apiurl, JSON.stringify(this.packet {headers:this.headers}).subscribe(data => {
console.log('success')
console.log(data);
}, error => {
console.log(error);
console.log("Oooops!");
});
that returns on the error branch.
Trying to send data did not work either. Translating the curl
DATA="token=MY_TOKEN&content=record&format=json&type=flat&overwriteBehavior=normal&data=[{"id":"id1","id_complete":"0","name":"myname", "demo_complete":"0"}]&returnContent=count&returnFormat=json"
CURL=`which curl`
$CURL -H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
-X POST \
-d $DATA \
MY_URL
into
this.packet = { token: MY_TOKEN,
content: 'record',
format: 'json',
returnFormat: 'json',
type: 'flat',
data: [{"id":"id1","id_complete":"0","name":"myname", "demo_complete":"0"}],
};
this.headers = new Headers({'Content-Type': 'application/json', 'Accept': 'application/json'});
this.http.post(this.apiurl, JSON.stringify(this.packet {headers:this.headers}).subscribe(data => {
console.log('success')
console.log(data);
}, error => {
console.log(error);
console.log("Oooops!");
});
I am at beginner level when it comes to the http calls, so I am quite sure it is a silly mistake on my part. Any help or advice would be very much appreciated.