(request, callback = () => {})
| 466 | } |
| 467 | |
| 468 | post(request, callback = () => {}) { |
| 469 | const method = request.method |
| 470 | ? request.method.toLocaleLowerCase() |
| 471 | : 'post' |
| 472 | |
| 473 | // 如果指定了请求体, 但没指定 `Content-Type`、`content-type`, 则自动生成。 |
| 474 | if ( |
| 475 | request.body && |
| 476 | request.headers && |
| 477 | !request.headers['Content-Type'] && |
| 478 | !request.headers['content-type'] |
| 479 | ) { |
| 480 | // HTTP/1、HTTP/2 都支持小写 headers |
| 481 | request.headers['content-type'] = 'application/x-www-form-urlencoded' |
| 482 | } |
| 483 | // 为避免指定错误 `content-length` 这里删除该属性,由工具端 (HttpClient) 负责重新计算并赋值 |
| 484 | if (request.headers) { |
| 485 | delete request.headers['Content-Length'] |
| 486 | delete request.headers['content-length'] |
| 487 | } |
| 488 | // followRedirect 禁止重定向 |
| 489 | if ( |
| 490 | typeof request.followRedirect !== 'undefined' && |
| 491 | !request['followRedirect'] |
| 492 | ) { |
| 493 | if (this.isSurge() || this.isLoon()) request['auto-redirect'] = false // Surge & Loon |
| 494 | if (this.isQuanX()) |
| 495 | request.opts |
| 496 | ? (request['opts']['redirection'] = false) |
| 497 | : (request.opts = { redirection: false }) // Quantumult X |
| 498 | } |
| 499 | switch (this.getEnv()) { |
| 500 | case 'Surge': |
| 501 | case 'Loon': |
| 502 | case 'Stash': |
| 503 | case 'Shadowrocket': |
| 504 | case 'Egern': |
| 505 | default: |
| 506 | if (this.isSurge() && this.isNeedRewrite) { |
| 507 | request.headers = request.headers || {} |
| 508 | Object.assign(request.headers, { 'X-Surge-Skip-Scripting': false }) |
| 509 | } |
| 510 | $httpClient[method](request, (err, resp, body) => { |
| 511 | if (!err && resp) { |
| 512 | resp.body = body |
| 513 | resp.statusCode = resp.status ? resp.status : resp.statusCode |
| 514 | resp.status = resp.statusCode |
| 515 | } |
| 516 | callback(err, resp, body) |
| 517 | }) |
| 518 | break |
| 519 | case 'Quantumult X': |
| 520 | request.method = method |
| 521 | if (this.isNeedRewrite) { |
| 522 | request.opts = request.opts || {} |
| 523 | Object.assign(request.opts, { hints: false }) |
| 524 | } |
| 525 | $task.fetch(request).then( |
no test coverage detected