Use FormData and multipart/form-data instead of application/urlencoded for requests
This commit is contained in:
61
lib/fetch.js
61
lib/fetch.js
@ -1,34 +1,43 @@
|
||||
import https from 'https';
|
||||
import qs from 'qs';
|
||||
import FormData from 'form-data';
|
||||
|
||||
export default function fetch(path, data = {}) {
|
||||
const form = new FormData();
|
||||
const keys = Object.keys(data);
|
||||
|
||||
for (let key of keys) {
|
||||
console.log(key, data[key]);
|
||||
form.append(key, data[key]);
|
||||
}
|
||||
|
||||
export default function fetch(path, data) {
|
||||
const post = qs.stringify(data);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const req = https.request({
|
||||
hostname: 'api.telegram.org',
|
||||
method: data ? 'POST' : 'GET',
|
||||
path: '/bot' + path,
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
form.getLength((err, length) => {
|
||||
if (err) {
|
||||
return reject(err);
|
||||
}
|
||||
}, response => {
|
||||
return getBody(response).then(res => {
|
||||
try {
|
||||
let json = JSON.parse(res);
|
||||
resolve(json);
|
||||
} catch(e) {
|
||||
reject(e);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
|
||||
if (post) {
|
||||
req.write(post);
|
||||
}
|
||||
req.end();
|
||||
}).catch(err => {
|
||||
console.error('Error sending request', err);
|
||||
form.submit({
|
||||
protocol: 'https:',
|
||||
host: 'api.telegram.org',
|
||||
path: '/bot' + path,
|
||||
headers: {
|
||||
'Content-Length': length
|
||||
}
|
||||
}, (error, response) => {
|
||||
if (error) {
|
||||
return reject(error);
|
||||
}
|
||||
|
||||
return getBody(response).then(body => {
|
||||
try {
|
||||
let json = JSON.parse(body);
|
||||
resolve(json);
|
||||
} catch(e) {
|
||||
reject(e);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user