所以基本上我创建了自己的“ Imgur”,在其中输入图片网址等。
https://images.hdsydsvenskan.se/980x588/Q2GO5t2lmKtW6WwGuEVQNTPmt4o.jpg
问题在于它以前曾经起作用,但是现在我遇到了错误(我完全没有更改代码-我猜它与某些URL有关吗?),它们说:
{ Error: read ECONNRESET
at TLSWrap.onread (net.js:622:25) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read'}
老实说,我看不到问题,因为它可以在其他图片上使用,但是如果我选择等,则下面的图片。它一直给我这个问题。
const fs = require('fs')
const path = require('path')
const request = require('request')
const express = require('express')
const app = express()
const PORT = process.env.PORT || 8888
// Path to images directory
const images = path.join(__dirname, 'images')
// JSON parsing middleware
app.use(express.json())
app.post('/newimage', (req, res) => {
const imageUrl = req.body.image_url
const imageName = req.body.image_name
request({
url: imageUrl,
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
})
.on('error', (err) => {
console.log(err)
console.log(res.status())
res.status(500)
res.send('not ok')
})
.on('response', (response) => {
console.log(`Response for ${imageUrl}`)
console.log(response.statusCode + '\n')
res.send('ok')
})
.pipe(fs.createWriteStream(path.join(images, imageName + '.png')))
})
app.get('/images/:imagename', (req, res) => {
const imageName = req.params.imagename
const filePath = path.join(images, imageName + '.png')
console.log(imageName)
console.log(filePath)
if (fs.existsSync(filePath)) {
fs.createReadStream(filePath)
.pipe(res)
} else {
res.send('No image found')
}
})
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`)
console.log(`http://xx.xxx.xx.xx:${PORT}`)
})
如果有任何线索我将如何解决!我将不胜感激!
答案 0 :(得分:1)
您提到的in your comment与Adidas服务器之间发生了一些时髦的事情,它需要设置特定的标头列表才能起作用(否则,请求超时)
request({
url: imageUrl,
headers: {
Accept: '*/*',
'Accept-Encoding': 'gzip, deflate',
Connection: 'keep-alive',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
})
看起来他们正在使用的Varnish缓存可能配置错误(或者尝试阻止刮板是一种奇怪的尝试)。