μ΄ μλ:
require('request').get('http://www.test.com/ΧΧΧΧ.pdf');
λͺ λ°λ¦¬μ΄ νμ TypeError('The header content contains invalid characters')
μ μΆ©λν©λλ€.
μ΄μ encodeURI
κ°μΈλ©΄ μ±κ³΅ν©λλ€.
κ·Έλ¬λ μΈλΆ μμ€μμ URLμ μμ νλ©΄ μΈμ½λ©λ μλ μκ³ κ·Έλ μ§ μμ μλ μμ΅λλ€. μ΄λ₯Ό μ²λ¦¬νλ λ΄μ₯ λ©μ»€λμ¦μ΄ μμ΅λκΉ? ( encodeURI(decodeURI(url))
)
λν - λλ κ·Έ μμΈλ₯Ό μ‘μ λ°©λ²μ μ°Ύμ§ λͺ»νμ΅λλ€. try-catchμ΄λ .on('error', ...
μ΄λ μκ΄μμ΄
Node λ²μ 0.12.12 μ΄μμ μ¬μ©νμ¬ λμΌν μ€λ₯κ° λ°μν©λλ€. λμΌν μ½λκ° 0.12.9μμ μλν©λλ€.
_http_outgoing.js:355
throw new TypeError('The header content contains invalid characters');
^
TypeError: The header content contains invalid characters
at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:355:13)
at new ClientRequest (_http_client.js:101:14)
at Object.exports.request (http.js:49:10)
at Object.exports.request (https.js:136:15)
at Request.start (//application/node_modules/request/request.js:747:30)
at Request.end (/application/node_modules/request/request.js:1381:10)
at end (/application/node_modules/request/request.js:575:14)
at Immediate._onImmediate (/application/node_modules/request/request.js:589:7)
at processImmediate [as _immediateCallback] (timers.js:367:17)
μ κ²½μ°μλ μΏ ν€μ μ€ λ°κΏμ 보λ΄κ³ μμμ΅λλ€. λλ κ·Έκ²μ μ κ±°ν΄μΌνλ€.
μλμ, μ κ²½μ°λ μΏ ν€λ μΆκ° ν€λλ μλ κ°λ¨ν ν μ€μ§λ¦¬μ λλ€.
λ΄ κ³μ μ 보μ μ‘μΈμ€νλ €κ³ ν λ https://github.com/matt-major/do-wrapperλ₯Ό μ¬μ©νμ¬ λμΌν λ¬Έμ κ° λ°μν©λλ€.
_http_outgoing.js:348
throw new TypeError('The header content contains invalid characters');
^
TypeError: The header content contains invalid characters
at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:348:11)
at new ClientRequest (_http_client.js:85:14)
at Object.exports.request (http.js:31:10)
at Object.exports.request (https.js:197:15)
at Request.start (/home/pierre/Documents/freelance/upwork/dosh/node_modules/do-wrapper/node_modules/request/request.js:746:30)
at Request.write (/home/pierre/Documents/freelance/upwork/dosh/node_modules/do-wrapper/node_modules/request/request.js:1345:10)
at end (/home/pierre/Documents/freelance/upwork/dosh/node_modules/do-wrapper/node_modules/request/request.js:560:16)
at Immediate._onImmediate (/home/pierre/Documents/freelance/upwork/dosh/node_modules/do-wrapper/node_modules/request/request.js:588:7)
at processImmediate [as _immediateCallback] (timers.js:383:17)
λ¬Έμ λ μ΄κ²μ μμ νλ κ²μ μ½μ§λ§ request
λ μ€λ₯λ₯Ό μ‘μμ μ€λ₯ μ²λ¦¬κΈ°λ₯Ό ν΅ν΄ μ νν΄μΌ νλ€λ κ²μ
λλ€. νμ¬ μ΄κ²μ μλμΌλ‘ μλ/μΊμΉν μ μκΈ° λλ¬Έμ 볡ꡬν μ μλ κ½€ λμ μλ² μΆ©λμ μΌμΌν¬ μ μλ ν¬μ°©λμ§ μμ μμΈλ‘ λ°μν©λλ€.
κ·Έλμ μ λ μ΄κ²μ΄ request
μμ κ½€ μ¬κ°ν λ²κ·ΈλΌκ³ λ§νκ³ μΆμ΅λλ€. μ€λ₯λ₯Ό μ νν΄μΌ ν©λλ€.
λλ μ§κΈ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ’μ 2μκ°μ ν¬μνλλ°, μ¬μμ° ν
μ€νΈ μΌμ΄μ€λ₯Ό μμ±νλ κ²μ μμ£Ό μ¬μν μΌμ΄μμ΅λλ€.
μ½λλ² μ΄μ€μ λν νμ¬ μ§μμΌλ‘ https://github.com/request/caseless μ μ ν¨μ± κ²μ¬λ₯Ό μΆκ°νμ§ μλ ν κ³ μΉ μ μλ€λ κ²°λ‘ μ λλ¬νμ΅λλ€. btw λ°κ²¬νλ λ° 20-30λΆμ΄ μμλμμ΅λλ€. self.setHeader
. κ·Έ λμμ caseless
μ λ¬Έμνλμ΄ μμ§ μμΌλ©° ν€λ μ€μ λ° κ°μ Έμ€κΈ°λ₯Ό μ²λ¦¬νλ μ΄λ¦μμ λΆλͺ
νμ§ μμΌλ©° caseless.httpify(self, self.headers)
κ° setHeader
κ°μ²΄λ₯Ό μμμ΄ ν¨μΉν κ²μΌλ‘ μμλμ§λ μμ΅λλ€.
μμ² κ°μ²΄κ° μμ±λ μμ μ try/catch
λ μ€νμ μ€λ¨ν μ μλ κ°λ¨ν λ°©λ²μ΄ μκΈ° λλ¬Έμ λ³΅κ΅¬κ° κ±°μ λΆκ°λ₯ν©λλ€. self.req.end
λ κ³μ νΈμΆλλ©° νΈμΆμ΄ μ κ±°λλ©΄ νμ λμμ΄ νΈλ¦¬κ±°λμ§ μμ΅λλ€(λ€μ λ§νμ§λ§ μμ ν λͺ
ννμ§ μμ μ΄μ λ‘).
μμ§ν λ§ν΄μ, λ΄ νλ‘λμ μλΉμ€κ° λ‘μ§μ΄ λ무 볡μ‘ν΄μ try/catchμμ μ€λ₯λ₯Ό μ ννλ κ²λ§νΌ μ¬μ΄ κ²μ΄ μ 체λ₯Ό κΉμ΄ μ°κ΅¬νμ§ μκ³ λ μ€μ§μ μΌλ‘ λΆκ°λ₯ν 1.4k λΌμΈ λ©μΈ νμΌμ΄ μλ λΌμ΄λΈλ¬λ¦¬μ μμ‘΄νλ€λ κ²μ΄ λλ ΅μ΅λλ€. μ΄λ²€νΈμ λ£¨λΈ κ³¨λλ²κ·Έ κΈ°κ³. μ΄μ μ΄ λ¬Έμ μμ λ²μ΄λμΌ ν λμ λλ€.
μ΄κ²μ λ μ격ν ν€λ μ ν¨μ± κ²μ¬κ° μλ λ Έλ 5.6.0 μ΄μμλ μν₯μ μ€λλ€. https://github.com/nodejs/node/blob/v5.6.0/CHANGELOG.md
μ¬κΈ°μμ μμ λ¨ https://github.com/request/request/pull/2164
μ½λμμ μ€λ₯λ₯Ό μ²λ¦¬νλ λ°©λ²μ λν ν μ€νΈλ₯Ό μ΄ν΄λ³΄μμμ€.
.on('error', ...
μ΄λ²€νΈμ ν¨κ» μ€λ₯ μ²λ¦¬κ° νμμ κ°μ κ² κ°μ΅λλ€. μ’μ!
μ΄λ κ² νλ©΄ λ―Έλμ μ΄λ¦¬μμ μΌμ μ±μ΄ μΆ©λνμ§ μκ³ request
λμ± κ°λ ₯νκ² λ§λ€ μ μμ΅λλ€.
κΈμ, μ§κΈ λλ μμ²λκ² μ΄λ¦¬μμ λ©μ²μ΄μ²λΌ λκ»΄μ§λ€.
μ€μ λ‘ λμΌν μ루μ
μ΄ μ€λΉλμ΄ μμκ³ ν
μ€νΈκ° κ³μ μ€ν¨νμ΅λλ€.
λ΄ 'μ¬μν ν
μ€νΈ μΌμ΄μ€'μμ t.end()
μ ννλ κ²μ μμμ΅λλ€.
μ£μ‘ν©λλ€. λ€μ λ²μ λ΄ μ§μ μ κ²μνκ³ νΌλλ°±μ μμ²ν κ²μ λλ€.
@TimBeyer λ¬Έμ μμ΅λλ€. λ²μ 2.71μ΄ μμ μ¬νκ³Ό ν¨κ» κ²μλμμ΅λλ€. +1:
@simov λ²μ 2.71μ λΆλΆμ μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€. λ€μμ κ²μλ¬Ό μμ²μ 보λ΄κ³ λ°μ΄ν°λ₯Ό μ²ν¬λ‘ κ°μ Έμ€λ μλ리μ€μ λλ€.
request({
method: 'POST',
headers: {
'test': 'ΧΧΧΧ'
},
uri: apiUrl,
qs: req.query,
json: req.body,
gzip: true
}
, function(error, response, body) {
console.log('callback')
})
.on('response', function (response) {
console.log(response)
})
.on('error', function (err) {
console.log(err);
});
μ΄κ²μ μ€ννλ©΄ μ€λ₯κ° λ°μν©λλ€
return self.req.write.apply(self.req, arguments)
^
TypeError: Cannot read property 'write' of undefined
at Request.write (/Users/muhammadkhurrumqureshi/Workspace/www/node_modules/request/request.js:1385:18)
at end (/Users/muhammadkhurrumqureshi/Workspace/www/node_modules/request/request.js:565:18)
at Immediate._onImmediate (/Users/muhammadkhurrumqureshi/Workspace/www/node_modules/request/request.js:594:7)
at processImmediate [as _immediateCallback] (timers.js:383:17)
μ΄κ²μ λν΄ μΉμ νκ² λμμ£Όμκ² μ΅λκΉ?
@khurrumqureshiλ https://github.com/request/request/pull/2165 :+1μμ μμ λμμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ end
λ°©λ²κ³Ό λμΌν κ²μ¬μ
λλ€. κ·Έ μ΄μ λ start
κ° μ΄μ νμμ νΈμΆλκ³ μκ³ μ§κΈκΉμ§ λμ§ κ²μΌλ‘ μμλμ§ μμκΈ° λλ¬Έμ
λλ€. μμ²μ λ³Έλ¬Έ write
μ΄ μμΌλ©΄ end
μ μ νΈμΆλλ―λ‘ μ€λ₯κ° λ°μν©λλ€.
@simov : +1:
μ¬κΈ°λ λ§μ°¬κ°μ§μ λλ€.
TypeError: The header content contains invalid characters
at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:348:11)
at new ClientRequest (_http_client.js:85:14)
at Object.exports.request (http.js:31:10)
at Object.exports.request (https.js:199:15)
at Request.start (/home/mymodule/node_modules/request/request.js:744:32)
at Request.end (/home/mymodule/node_modules/request/request.js:1433:10)
at end (/home/mymodule/node_modules/request/request.js:566:14)
at Immediate.<anonymous> (/home/mymodule/node_modules/request/request.js:580:7)
at runCallback (timers.js:570:20)
at tryOnImmediate (timers.js:550:5)
μλ΅ ν€λλ λ€μκ³Ό κ°μ΅λλ€.
headers:
{ 'x-backside-transport': 'OK OK,FAIL FAIL',
connection: 'close',
'transfer-encoding': 'chunked',
'x-dp-local-file': 'true',
'x-client-ip': '127.0.0.1,176.31.126.162',
'x-global-transaction-id': '145630106',
date: 'Tue, 08 Nov 2016 01:03:59 GMT',
'www-authenticate': 'Basic realm="Gateway(Log-in)"',
'x-archived-client-ip': '127.0.0.1',
'content-type': '',
'x-dp-tran-id': 'gateway' },
rawHeaders:
[ 'X-Backside-Transport',
'OK OK,FAIL FAIL',
'Connection',
'close',
'Transfer-Encoding',
'chunked',
'x-dp-local-file',
'true',
'X-Client-IP',
'127.0.0.1,176.31.126.162',
'X-Global-Transaction-ID',
'145630106',
'Date',
'Tue, 08 Nov 2016 01:03:59 GMT',
'WWW-Authenticate',
'Basic realm="Gateway(Log-in)"',
'X-Archived-Client-IP',
'127.0.0.1',
'Content-Type',
'',
'X-DP-Watson-Tran-ID',
'gateway' ]
μμ² ν€λλ λ€μκ³Ό κ°μ΅λλ€.
{ accept: 'application/json',
authorization: 'Basic ...g==',
referer: 'https://hostname.com/classify?text=%20So%20happy%20with%20this%20πππππ',
host: 'gateway.myclass.net' }
보μλ€μνΌ μμ²μλ <U+1F44D>
νΉμ λ¬Έμκ° 3λ² ν¬ν¨λμ΄ μμ΅λλ€.
κ·Έκ² λ¬Έμ κ° μλκΉμ?
node.js https
λͺ¨λμ΄ μ§μνμ§ μλ κ² κ°μ΅λλ€.
λ€λ₯Έ μ¬λμ΄ λμ κ°μ λ¬Έμ λ₯Ό κ²ͺκ³ μλ κ²½μ°λ₯Ό λλΉνμ¬ aws-sdk
μ΄ μ€λ₯κ° λ°μνκ³ λͺ μκ° λμ λλ₯Ό λ―ΈμΉκ² λ§λ€μμ΅λλ€. PrvScan
λ¬Έμ \u001b[5~
λ°νμ‘μΌλ©°, μ΄λ AWS μμ²μμ μ¬μ©νλ Authorization ν€λλ‘ μ νλ λ΄ ~/.aws/credentials
νμΌμ μ¨μ΄ μμμ΅λλ€. μ΄ μ€λ₯λ λ΄ Windows 7 μμ€ν
μμλ§ λνλ¬μΌλ―λ‘ λ΄ AWS κ³μ λ° μΌλΆ Windows λ¬Έμ μΈμ½λ©μμ μ격 μ¦λͺ
νμΌμ κ²μνλ λ°©λ²κ³Ό κ΄λ ¨μ΄ μμ μ μμ΅λλ€. cat
μ격 μ¦λͺ
νμΌμ μ€νν λλ νμλμ§ μμμ§λ§ vi
νμΌμ μ΄λ©΄ νμλμμ΅λλ€.
μ, λ°©κΈ κ°μ λ¬Έμ κ° μμμ΅λλ€. μΈμ ν΄μΌ νλ€λ κ²μ μ΄ν΄νλ λ° λͺ μκ°μ΄ κ±Έλ Έμ΅λλ€.
Windows μμ€ν
μμ MINGW64(Git Bash)λ₯Ό μ¬μ©νκ³ μμμ΅λλ€. λͺ
λ Ή ν둬ννΈμμ λ
Έλλ₯Ό μ¬μ©νμ¬ λμΌν μ€ν¬λ¦½νΈλ₯Ό μ€νν΄ λ³΄μμ΅λλ€.... κ·Έλ¦¬κ³ μλ
νμΈμ.... μλνμ΅λλ€????
λ°©κΈ κ°μ μ€λ₯κ° λ°μνλλ° μ‘μ λ°©λ²μ μ°Ύμ μ μμ΅λλ€. μ΄λ―Έμ§ νλ‘μλ₯Ό κ΅¬μΆ μ€μ΄λ―λ‘ λ€λ₯Έ μλ²κ° λ°ννλ λ΄μ©μ μ€μ λ‘ μ μ΄ν μ μμ΅λλ€. νλ‘λμ μμ μ 체 μλ²λ₯Ό μΊμ±νμ§ μμΌλ €λ©΄ μ΄λ»κ² ν΄μΌ ν©λκΉ?!
λλ κ°μ λ¬Έμ κ° μμλλ° "set"μ "auth"λ‘ κ΅ννλ©΄ μλνκΈ° μμνμ΅λλ€. μλ₯Ό λ€μ΄:
it('ERROR, Wrong GET request', (done)=>{
request(server).get("/api/")
.set('Authorization', 'Bearer ' + tokenKey)
.then(res=>{
expect(res.statusCode).to.equal(404);
done()
}).catch(err=>done(err))
})
CONSOLE RES: μ€λ₯, μλͺ»λ GET μμ²:
TypeError [ERR_INVALID_CHAR]: ν€λ λ΄μ©μ μλͺ»λ λ¬Έμκ° μμ΅λλ€. ["Authorization"]
μ½λλ₯Ό λ€μκ³Ό κ°μ΄ λ³κ²½ν ν:
it('ERROR, Wrong GET request', (done)=>{
request(server).get("/api/")
.auth('Authorization', 'Bearer ' + tokenKey) //**<---here is the change**
.then(res=>{
expect(res.statusCode).to.equal(404);
done()
}).catch(err=>done(err))
})
μ½μ ν΄μλ: OKI ;p
κ°μ₯ μ μ©ν λκΈ
λ¬Έμ λ μ΄κ²μ μμ νλ κ²μ μ½μ§λ§
request
λ μ€λ₯λ₯Ό μ‘μμ μ€λ₯ μ²λ¦¬κΈ°λ₯Ό ν΅ν΄ μ νν΄μΌ νλ€λ κ²μ λλ€. νμ¬ μ΄κ²μ μλμΌλ‘ μλ/μΊμΉν μ μκΈ° λλ¬Έμ 볡ꡬν μ μλ κ½€ λμ μλ² μΆ©λμ μΌμΌν¬ μ μλ ν¬μ°©λμ§ μμ μμΈλ‘ λ°μν©λλ€.κ·Έλμ μ λ μ΄κ²μ΄
request
μμ κ½€ μ¬κ°ν λ²κ·ΈλΌκ³ λ§νκ³ μΆμ΅λλ€. μ€λ₯λ₯Ό μ νν΄μΌ ν©λλ€.