【发布时间】:2021-01-12 08:35:33
【问题描述】:
您好,我在 Nodejs 中使用请求模块。
下面有代码:
const response = await request.post({
uri: "https://item.rms.rakuten.co.jp/rms/mall/rsf/item/vc",
headers: {
Host: "item.rms.rakuten.co.jp",
Origin: "https://item.rms.rakuten.co.jp",
Referer: "https://item.rms.rakuten.co.jp/rms/mall/rsf/item/vc",
"Content-Type": "application/x-www-form-urlencoded",
"Content-Length": buildForm(data).length,
Cookie: cookies~,
Accept:
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,id;q=0.6",
"Cache-Control": "max-age=0",
Connection: "keep-alive",
"sec-ch-ua": `"Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"`,
"sec-ch-ua-mobile": "?0",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": 1,
"User-Agent":
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
},
formData: buildForm(data),
})
const buildForm = (data) => {
const keys = Object.keys(data);
const form = [];
for (let i = 0, l = keys.length; i < l; i++) {
if (typeof data[keys[i]] === "string") {
const data_value_buf = Buffer.from(data[keys[i]]);
const data_value_convert = encoding.convert(
data_value_buf,
"EUCJP",
"UTF8"
);
form.push(keys[i] + "=" + encoding.urlEncode(data_value_convert));
} else if (typeof data[keys[i]] === "undefined") {
form.push(keys[i] + "=" + "-");
} else {
form.push(keys[i] + "=" + data[keys[i]]);
}
}
return form.join("&");
}
数据是Json类型。
所以,我在请求发布选项中添加了encoding: null,,比如
const response = await request.post({
uri: "https://item.rms.rakuten.co.jp/rms/mall/rsf/item/vc",
encoding: null,
headers: {
Host: "item.rms.rakuten.co.jp",
~~~~
然后我使用 Iconv 模块。
const iconv = new Iconv("EUC-JP", "UTF-8//translit//ignore");
const res = iconv.convert(response);
如何在不损坏字符串的情况下显示响应
响应头也在下面
Cache-control: no-store, no-cache
Connection: close
Content-Encoding: gzip
Content-Type: text/html; Charset=EUC-JP
Date: Tue, 12 Jan 2021 05:28:50 GMT
Pragma: no-cache
Server: Apache
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-frame-options: DENY
X-oracle-dms-ecid: 93mhk0e_y40000000
X-oracle-dms-rid: 0:1
X-XSS-Protection: 0
请告诉我如何获得像 html 标签响应这样的正常响应
【问题讨论】:
标签: node.js encoding request iconv response-headers