fimfic2epub/src/fetch.js

77 lines
1.9 KiB
JavaScript
Raw Normal View History

2016-06-24 01:26:01 +12:00
2016-06-28 19:39:31 +12:00
import isNode from 'detect-node'
2016-08-23 19:19:01 +12:00
function fetchNode (url, responseType) {
2016-08-15 08:42:57 +12:00
const request = require('request')
2016-08-23 19:19:01 +12:00
if (url.indexOf('/') === 0) {
url = 'http://www.fimfiction.net' + url
}
return new Promise((resolve, reject) => {
request({
url: url,
encoding: responseType ? null : 'utf8',
headers: {
referer: 'http://www.fimfiction.net/',
Cookie: 'view_mature=true',
2016-08-23 19:19:01 +12:00
}
}, (error, response, body) => {
if (error) {
reject(error)
return
}
2016-08-24 02:32:55 +12:00
// let type = response.headers['content-type']
2016-08-23 19:19:01 +12:00
resolve(body)
})
2016-06-28 19:39:31 +12:00
})
}
2016-08-23 19:19:01 +12:00
export default function fetch (url, responseType) {
2016-06-24 01:26:01 +12:00
if (url.indexOf('//') === 0) {
url = 'http:' + url
}
2017-06-08 02:17:40 +12:00
if (url.indexOf('/') === 0) {
url = 'https://fimfiction.net' + url
}
2016-06-28 19:39:31 +12:00
if (isNode) {
2016-08-23 19:19:01 +12:00
return fetchNode(url, responseType)
2016-06-24 01:26:01 +12:00
}
2016-08-23 19:19:01 +12:00
return new Promise((resolve, reject) => {
if (typeof window.fetch === 'function') {
2017-08-16 10:57:09 +12:00
const headers = new Headers()
headers.append("Cookie", "view_mature=true");
window.fetch(url, {
method: 'GET',
mode: 'cors',
credentials: 'include',
cache: 'default',
2017-08-16 10:57:09 +12:00
headers: headers,
redirect: 'follow'
}).then((response) => {
if (responseType === 'blob') {
response.blob().then(resolve, reject)
} else if (responseType === 'arraybuffer') {
response.arrayBuffer().then(resolve, reject)
} else {
response.text().then(resolve, reject)
}
}).catch((err) => {
reject('Error fetching ' + url + ' (' + err + ')')
})
} else {
let x = new XMLHttpRequest()
x.open('get', url, true)
if (responseType) {
x.responseType = responseType
}
x.onload = function () {
resolve(x.response)
}
x.onerror = function () {
reject('Error fetching ' + url)
}
x.send()
2016-08-23 19:19:01 +12:00
}
})
2016-06-24 01:26:01 +12:00
}