http - Jenkins http请求无法识别文件名
问题描述
我认为这个请求失败是因为它无法识别文件名。使用此HTTP 请求插件并在声明性管道中遵循此API 文档,我运行了以下请求...
script {
env.WORKSPACE = pwd()
def response = httpRequest url: "https://cloud.tenable.com/compliance/export",
customHeaders: [[name: 'X-ApiKeys', value: "${ACCESS_KEY}"]],
httpMode: 'POST',
acceptType: 'APPLICATION_JSON',
uploadFile: "${env.WORKSPACE}/test.zip"
}
错误:
java.lang.IllegalStateException: Name is blank
11:02:40 at org.apache.http.util.Asserts.notBlank(Asserts.java:64)
11:02:40 at org.apache.http.entity.mime.FormBodyPartBuilder.build(FormBodyPartBuilder.java:96)
11:02:40 at org.apache.http.entity.mime.MultipartEntityBuilder.addPart(MultipartEntityBuilder.java:148)
11:02:40 at jenkins.plugins.http_request.HttpRequestExecution.authAndRequest(HttpRequestExecution.java:314)
11:02:40 at jenkins.plugins.http_request.HttpRequestExecution.call(HttpRequestExecution.java:260)
11:02:40 at jenkins.plugins.http_request.HttpRequestExecution.call(HttpRequestExecution.java:80)
11:02:40 at hudson.remoting.LocalChannel.call(LocalChannel.java:46)
11:02:40 at jenkins.plugins.http_request.HttpRequestStep$Execution.run(HttpRequestStep.java:380)
11:02:40 at jenkins.plugins.http_request.HttpRequestStep$Execution.run(HttpRequestStep.java:358)
11:02:40 at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
11:02:40 at hudson.security.ACL.impersonate2(ACL.java:449)
11:02:40 at hudson.security.ACL.impersonate(ACL.java:461)
11:02:40 at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
11:02:40 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
11:02:40 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
11:02:40 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
11:02:40 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
11:02:40 at java.lang.Thread.run(Thread.java:748)
我相信这与java 文档中的 addFile 方法有关吗?将 contentType 指定为 APPLICATION_ZIP 或 APPLICATION_OCTETSTREAM 会导致相同的错误。用不存在的文件替换 test.zip 会将错误更改为“文件不存在”,这向我表明正在读取 test.zip,但“名称”参数不知何故为空白。
解决方案
显然你必须设置multipartName
:
httpRequest url: "https://cloud.tenable.com/compliance/export",
customHeaders: [[name: 'X-ApiKeys', value: "${ACCESS_KEY}"]],
httpMode: 'POST',
acceptType: 'APPLICATION_JSON',
uploadFile: "test.zip", // env.WORKSPACE is not necessary, the path is already relative to the current workspace
multipartName: "something" // <--
(我相信这设置了与文件关联的 HTML 表单字段的名称。对于 REST API,我猜这个值无关紧要。)
或者,如果您的服务器支持它,您也可以设置wrapAsMultipart
为 false,这样文件就不会被包装,multipart/form-data
而是直接在请求正文中发送。
推荐阅读
- sonarqube - SonarQube 在 NodeJS 应用程序中显示单元测试的 0% 覆盖率
- python - 稀疏矩阵到 ijv 格式
- amazon-web-services - Spring Cloud 功能不适用于 Spring Native
- r - 使用 for 循环进行双重过滤
- python - Python:列表循环触发有效输入循环
- python - 如何在pyDev中调试期间自动重新加载
- spring - Spring SFTP过滤文件名根据当前日期
- java - java - 如何使用eclipse存储来自java的数组数据?
- r - 用 thornthwaite 方法绘制多个纬度点的 SPEI
- python - 如何隐藏用户机器上的密钥(不是你自己的服务器)?