如何使用Axios发送带指定curl参数的请求(NestJS调用Jenkins场景)
基于NestJS + Axios 实现Jenkins触发构建请求的方案
首先先拆解你给出的curl请求的核心配置:基础身份认证、Jenkins CSRF请求头(Crumb)、POST表单参数提交,对应Axios的实现逻辑如下:
步骤1:依赖安装(未安装相关依赖时执行)
npm install @nestjs/axios axios qs @types/qs
步骤2:业务代码实现
import { HttpService } from '@nestjs/axios'; import { firstValueFrom } from 'rxjs'; import * as qs from 'qs'; // 业务服务类 export class YourJenkinsService { // 注入HttpService constructor(private readonly httpService: HttpService) {} async triggerJenkinsBuild() { // 替换为你的实际配置值 const JENKINS_URL = '你的Jenkins服务根地址'; const JOB_NAME = '要触发的任务名'; const JENKINS_USER = 'pp'; const JENKINS_USER_TOKEN = '1232343454564123453'; const JENKINS_CRUMB = '你获取到的Jenkins CSRF校验值'; const JOB_TRIGGER_TOKEN = '123456'; try { const res = await firstValueFrom( this.httpService.post( `${JENKINS_URL}/job/${JOB_NAME}/buildWithParameters`, // 表单参数,需要追加其他构建参数直接在该对象内新增即可 qs.stringify({ token: JOB_TRIGGER_TOKEN, }), { // 对应curl的--user基础认证配置 auth: { username: JENKINS_USER, password: JENKINS_USER_TOKEN }, headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Jenkins-Crumb': JENKINS_CRUMB } } ) ) // 成功逻辑处理 console.log('任务触发成功,响应状态码:', res.status) return res.data } catch (err) { // 错误逻辑处理 console.error('任务触发失败:', err.response?.data || err.message) throw err } } }
注意事项
- 你原curl中重复出现两次
--user属于笔误,保留正确的用户凭证即可,重复配置会被后者覆盖 - 如果不知道怎么获取Jenkins Crumb,可以先带基础认证发送GET请求到
${JENKINS_URL}/crumbIssuer/api/json,返回结果中的crumb字段就是需要的校验值 - 生产环境不建议关闭Jenkins CSRF保护,所以请求必须携带Jenkins-Crumb头
- 若不需要获取完整响应头和状态码,可自行调整代码只返回响应体即可
内容的提问来源于stack exchange,提问作者Nithin
相关产品推荐
相关产品推荐

