当前位置: 首页 > 知识库问答 >
问题:

记录Rest Assured自己的标题

羊舌高爽
2023-03-14

我正在尝试访问Rest Assured注入的HTTP头。Spring的模拟MVC让您可以通过MVC结果访问几乎所有内容,并且您可以使用这个结果来记录关于请求和响应的几乎所有内容。我能看到如何做到这一点的唯一方法是使用一个过滤器。但是,它为您提供了有限的请求访问权限(您只需要获得RequestSpecification)。我知道访问由HttpClient添加的头可能很棘手,但看起来您甚至无法访问由Rest Assured本身添加的头。例如,我看不到任何与OAuth相关的标题,也看不到内容类型或内容长度。出现的唯一标题是使用例如手动添加的标题。contentType(contentType.XML)

有没有其他方法可以访问这些标题?我不需要修改请求,我只想能够记录所有请求以及由Rest Assured注入的头文件。

共有1个答案

东方华晖
2023-03-14

我发现,它可以注册自己的HttpClientFactory与RestAs的:

RestAssured.config().httpClient(
  HttpClientConfig.httpClientConfig().httpClientFactory(
    new CustomHttpClientFactory())

因此,我创建了一个返回HTTP客户端的新工厂,并在其中注入了一些请求和响应拦截器。

public class CustomHttpClientFactory extends HttpClientConfig.HttpClientFactory {
    @Override
    public HttpClient createHttpClient() {
        DefaultHttpClient client = new DefaultHttpClient();
        client.addRequestInterceptor((request, ctx) -> {
            // do what you will 
        });
        client.addResponseInterceptor((response, ctx) -> {
            // do what you will
        });
        return client;
    }
}

这使您几乎可以完全控制请求和响应。需要记住的一点是,如果要读取响应的实体,应该首先将其包装在BufferedHttpEntity中,以使其可重新读取:

if (response.getEntity() != null && !response.getEntity().isRepeatable()) {
    response.setEntity(new BufferedHttpEntity(response.getEntity()));
}

我遇到的另一个问题是在试图查看OAuth相关信息时。当使用Restasured的OAuth功能时,它会在执行请求之前将自己的OAuthSigner拦截器添加到HTTP客户端。这意味着它将始终是最后一个被调用的拦截器,任何你可能已经注入的拦截器都将在请求被签名之前被调用。因为我现在真的不需要看到签名,所以我没有进一步研究这个问题,我把它留给读者作为练习。;)

 类似资料:
  • 4399游戏后端开发工程师 面了大概半个多小时 上来自我介绍,问了点项目里的内容,然后接下来基本都是八股。 用过的容器,unodered_map底层是什么,答哈希表,问,哈希表的底层是什么?怎么找到对应关系?hash函数相关 map底层是什么?答红黑树,问什么是红黑树,红黑树有什么特点? 字符串匹配算法,说了下KMP 进程和线程相关的问题。 段错误相关内容。 用过图的数据结构吗? 了解哪些排序?归

  • 华为,面试已结束 自我感觉三面不是很理想,祈祷华子收留我 中兴,虽然专业没有这么对口,最近还在恶补中,但base 西安,听说也是预研部门,如果能去感觉也不错 ———————————————————- 虽然岗位不匹配,但是面试官很nice,给我把简历释放了,还帮我联系了相关部门的hr,等重新安排中 荣耀,面完了资面和技术一面,荣子的面试流程观感很好,希望后边顺利吧 感觉今年研究所好难啊,挂在简历上真

  • 最近我一直在使用Kubernetes,我偶然发现了loadbalancer主题。我一直遵循此文档:https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ 我遵循了从yaml文件开始的完全相同的步骤: 官方留档说结果是如果我做kubectl描述服务示例服务: 但是,我的没有“

  • 我使用JSoup从html文档中提取某些标记。但是,我需要用团队创建的一些标记来更改其中的一些。 示例 检查我的标签是否需要自动关闭标签。有线索吗?谢谢

  • 写在前面 我是2022年11月才开始真正学前端的,(之前在项目里写点Django的template,写点jQuery啥的应该不算什么学前端吧...),当时已经有点意识到形势的严峻了,不多,就一点,所以到后来找实习还是盲目自信了。 为啥选择前端? 其实自己学的技术栈很杂,或者说就没啥技术栈,啥都用过,但也仅限于用过。一直以来就是实验室的项目需要我干啥,我就看点啥,完全的任务驱动型学习,所以就搞过An

  • 为了真正地理解 RxJS,我推荐你尝试自己实现它的部分子集感受下自己可以产出怎样的代码。大多数情况下,并不是真的有必要了解到这个深度,但如果你有时间的话,请尝试一下。我们先来看看一个非常基础的实现,然后再一步步将其重构,最后使其看上去真的像那么回事。 步骤 I 步骤 II 步骤 III 步骤 IV