将curl GET请求转为REST-Assured请求时用户名密码如何正确配置
问题原因及正确配置方案
核心错误点
- 你错误将
--user对应的HTTP Basic认证参数用formParam传递:formParam是用来传递POST请求表单参数的,GET请求根本不会携带表单参数,服务端自然无法识别认证信息 - 未配置自动跟随重定向:你原curl请求加了
--location参数会自动处理3xx重定向,REST Assured默认不会自动跟随重定向,这也是导致连接失败的常见原因 - 日志未输出大概率是请求根本没发出去就报错,你可以把日志配置调整到请求构建前就生效排查问题
正确配置代码
基础请求验证写法
import static io.restassured.RestAssured.given; import org.apache.http.HttpStatus; public class ArtifactoryTest { public void testJfrogDownload() { String url = "https://repo.jfrog.org/artifactory/<REPO-KEY>/<GROUPD-ID>/<ARTIFACT-ID>/<VERSION>-SNAPSHOT/file1.xml"; given() .auth().basic("username", "password") // 正确配置Basic Auth .header("originating_ip", "127.0.0.1") .redirects().follow(true) // 开启自动跟随重定向,对应curl的--location参数 .log().all() .when() .get(url) .then() .log().all() .assertThat().statusCode(HttpStatus.SC_OK); } }
带文件下载的写法(对应原curl的--output参数)
如果你需要和原curl一样把响应的xml文件保存到本地,需要额外添加响应体处理逻辑:
import static io.restassured.RestAssured.given; import org.apache.http.HttpStatus; import java.io.FileOutputStream; import java.io.IOException; public class ArtifactoryTest { public void testJfrogDownload() throws IOException { String url = "https://repo.jfrog.org/artifactory/<REPO-KEY>/<GROUPD-ID>/<ARTIFACT-ID>/<VERSION>-SNAPSHOT/file1.xml"; byte[] responseBytes = given() .auth().basic("username", "password") .header("originating_ip", "127.0.0.1") .redirects().follow(true) .log().all() .when() .get(url) .then() .log().all() .assertThat().statusCode(HttpStatus.SC_OK) .extract() .asByteArray(); // 写入本地文件,对应curl的--output jrog_test_output try (FileOutputStream fos = new FileOutputStream("jrog_test_output")) { fos.write(responseBytes); } } }
内容的提问来源于stack exchange,提问作者Aavik
相关产品推荐
相关产品推荐

