以下代碼是 Postman 的摘錄,我在其中得到了回應。由于某種原因,NodeJS 版本似乎沒有運行并給出“Socket hang up”錯誤,而 python 版本運行良好。兩個代碼都粘貼在下面:
const obj = {
asset: [
{
age: "33",
existingDisease: false,
gender: "MALE",
id: "883a8cb5446f4d6780db2e59bdf4ee35",
proposerRelationShip: "SELF",
used: false,
},
],
cover: [],
pinCode: "122001",
quoteId: "7637d7ff982145569fbfa604e3b74485",
sumInsured: "700000",
term: { unit: "YEAR", value: "1" },
};
const strObj = JSON.stringify(obj);
var options = {
method: "POST",
url: "https://sa.navi.com/v3/premium?paymentMode=SUBSCRIPTION",
headers: {
appversion: "2.2.4",
appversioncode: "92",
osversion: "Android_11",
deviceid: "3e44626c3bb37d4c",
defaultlocale: "en_US",
"x-session-token": "d635eb15-10aa-4315-9122-6ed3627dc1b8",
"x-click-stream-data":
'{"app":{"name":"Navi","version":"92","version_name":"2.2.4"},"device":{"device_id":"3e44626c3bb37d4c","advertising_id":"706649fa-50f0-410d-9c17-3085201808e2","manufacturer":"Google","model":"sdk_gphone_x86","os":"Android","os_version":"30"},"network":{"carrier":"Android","type":"Wifi"},"location":{"latitude":"37.4219983","longitude":"-122.084"},"user":{}}',
"x-target": "GI",
source: "APK",
"content-type": "application/json; charset=utf-8",
"content-length": "419",
"accept-encoding": "gzip",
"user-agent": "okhttp/4.9.0",
},
body: strObj,
};
console.log("Going to trigger API");
console.log(options);
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
給出錯誤:
錯誤:錯誤:套接字掛起
雖然 Python 中的相同代碼有效:
url = "https://sa.navi.com/v3/premium?paymentMode=SUBSCRIPTION"
payload = "{\"asset\":[{\"age\":\"33\",\"existingDisease\":false,\"gender\":\"MALE\",\"id\":\"883a8cb5446f4d6780db2e59bdf4ee35\",\"proposerRelationShip\":\"SELF\",\"used\":false}],\"cover\":[],\"pinCode\":\"122001\",\"quoteId\":\"7637d7ff982145569fbfa604e3b74485\",\"sumInsured\":\"700000\",\"term\":{\"unit\":\"YEAR\",\"value\":\"1\"}}"
headers = {
'appversion': '2.2.4',
'appversioncode': '92',
'osversion': 'Android_11',
'deviceid': '3e44626c3bb37d4c',
'defaultlocale': 'en_US',
'x-session-token': 'd635eb15-10aa-4315-9122-6ed3627dc1b8',
'x-click-stream-data': '{"app":{"name":"Navi","version":"92","version_name":"2.2.4"},"device":{"device_id":"3e44626c3bb37d4c","advertising_id":"706649fa-50f0-410d-9c17-3085201808e2","manufacturer":"Google","model":"sdk_gphone_x86","os":"Android","os_version":"30"},"network":{"carrier":"Android","type":"Wifi"},"location":{"latitude":"37.4219983","longitude":"-122.084"},"user":{}}',
'x-target': 'GI',
'source': 'APK',
'content-type': 'application/json; charset=UTF-8',
'content-length': '419',
'accept-encoding': 'gzip',
'user-agent': 'okhttp/4.9.0'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
uj5u.com熱心網友回復:
你content-length錯了(當你的有效載荷 JSON 的實際長度為 279 時,你傳遞了 419)。這可能意味著接收服務器仍在等待其余內容到達,它永遠不會到達,因此最終服務器超時并掛斷您(這就是您收到掛斷錯誤的原因)。
而且,你瞧,當我洗掉content-length標頭并讓請求庫自動計算它時,請求開始為我作業。
至于 python 實作,一個猜測是它覆寫了錯誤的內容長度并為您修復它。
僅供參考,該request()庫已被棄用,不建議人們使用它撰寫新代碼,因為將來它不會使用新功能進行改進。建議的替代方案串列(所有支持承諾)在這里。在該串列中我最喜歡的是got()它也支持與request()庫相同的大多數選項,但它是基于 Promise 的核心,并且有許多 API 改進,使其更易于使用(在我看來)。
而且,確實您的代碼與got()庫一起作業得很好(在洗掉不正確的content-length標頭之后)。
const got = require('got');
const obj = {
asset: [{
age: "33",
existingDisease: false,
gender: "MALE",
id: "883a8cb5446f4d6780db2e59bdf4ee35",
proposerRelationShip: "SELF",
used: false,
}, ],
cover: [],
pinCode: "122001",
quoteId: "7637d7ff982145569fbfa604e3b74485",
sumInsured: "700000",
term: { unit: "YEAR", value: "1" },
};
const strObj = JSON.stringify(obj);
var options = {
method: "POST",
url: "https://sa.navi.com/v3/premium?paymentMode=SUBSCRIPTION",
headers: {
appversion: "2.2.4",
appversioncode: "92",
osversion: "Android_11",
deviceid: "3e44626c3bb37d4c",
defaultlocale: "en_US",
"x-session-token": "d635eb15-10aa-4315-9122-6ed3627dc1b8",
"x-click-stream-data": '{"app":{"name":"Navi","version":"92","version_name":"2.2.4"},"device":{"device_id":"3e44626c3bb37d4c","advertising_id":"706649fa-50f0-410d-9c17-3085201808e2","manufacturer":"Google","model":"sdk_gphone_x86","os":"Android","os_version":"30"},"network":{"carrier":"Android","type":"Wifi"},"location":{"latitude":"37.4219983","longitude":"-122.084"},"user":{}}',
"x-target": "GI",
source: "APK",
"content-type": "application/json; charset=utf-8",
"accept-encoding": "gzip",
"user-agent": "okhttp/4.9.0",
},
body: strObj,
};
console.log("Going to trigger API");
got(options).then(response => {
console.log(response.body);
}).catch(e => {
console.log(e);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/405940.html
標籤:
