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

Spring Web客户端:如何跳过/接受Cookie同意请求?

任绪
2023-03-14

我正在使用Spring WebClient检索福布斯全球2000强。它工作正常,但现在他们在试图访问https://www . Forbes . com/Forbes API/org/global 2000/2020/position/true . JSON上的JSON数据时添加了一个cookie同意模式。限制=2000

从技术上讲,这是我可以从Chrome看到的网络流:

>

  • 获取 https://www.forbes.com/forbesapi/org/global2000/2020/position/true.json?limit=2000

    curl'https://www.forbes.com/forbesapi/org/global2000/2020/position/true.json?limit=2000'
    -H'权限:www.forbes.com'
    -H'普拉格玛:无缓存'
    -H'缓存控制:无缓存'
    -H'dnt: 1'
    -H'升级不安全请求:1'
    -H'用户代理:Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome /83.0.4103.61Safari /537.36'
    -H'接受:text/html,应用程序/xhtml xml,应用程序/xml;q=0.9,图像/webp,图像/apng,/;q=0.8,应用程序/签名交换;v=b3;q=0.9'
    -H'sec获取站点:无'
    -H'sec获取模式:导航'
    -H'sec获取用户:?1'
    -H'sec-形容:文档'
    -H'接受语言:it-IT,it;q=0.9,en-GB;q=0.8,en;q=0.7,ru-RU;q=0.6,ru;q=0.5,en-US;q=0.4'
    -压缩

    302重定向至https://www.forbes.com/consent/?toURL=https://www.forbes.com/forbesapi/org/global2000/2020/position/true.json?limit=2000

    有没有什么方法可以使用Spring Web客户端跳过/绕过/接受这样的同意?一个curl或postman示例也足够了。

    更新

    这是返回JSON的GET。它有一些饼干,所以也许这样它可以工作。然而,我需要将其自动化。

    curl 'https://www.forbes.com/forbesapi/org/global2000/2020/position/true.json?limit=2000' \
      -H 'authority: www.forbes.com' \
      -H 'pragma: no-cache' \
      -H 'cache-control: no-cache' \
      -H 'dnt: 1' \
      -H 'upgrade-insecure-requests: 1' \
      -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36' \
      -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
      -H 'sec-fetch-site: none' \
      -H 'sec-fetch-mode: navigate' \
      -H 'sec-fetch-user: ?1' \
      -H 'sec-fetch-dest: document' \
      -H 'accept-language: it-IT,it;q=0.9,en-GB;q=0.8,en;q=0.7,ru-RU;q=0.6,ru;q=0.5,en-US;q=0.4' \
      -H 'cookie: notice_behavior=expressed,eu; notice_gdpr_prefs=0,1,2:1a8b5228dd7ff0717196863a5d28ce6c; notice_preferences=2:1a8b5228dd7ff0717196863a5d28ce6c; client_id=8ec8eb2817c5d8913fe8f17384e17644a7e; global_ad_params=%7B%7D; __aaxsc=0; _ga=GA1.2.1634735456.1605525570; _gid=GA1.2.1103122519.1605525570; _fbp=fb.1.1605525570288.36176089; crdl_forbes-livebID=aa58b21d-aa96-4ee0-8340-fb48af0c1a94; crdl_forbes-liveaID=anonimIcgdCVIkNG7BUNba5etK; rbzid=l/U6Jw1r1yWT74cdJuQgosf28tekVPrGz9xIBrFnVQIm5sDTTvTWn/1+r8KTgAdbwgwm63USRoqfI+JwWc3BgQoGTMvyrKX2VRjibHRVHjUSGWqZKX+XhkPhAl2YVYGXbbgLmximPCVub7cvx/UClbnBmD33n1qHOtWLY9urqrdhtD5OGF4BLBZ0L5m0YGx1EKQb+AkPBgt9hT3pryTWI4S84CzcPLIsJTmCtn7YRLgplAvwGe1EA/W8a90o6dER+bVJ+Sy/8/dWswABzRNVwQ==; rbzsessionid=d40c35ba621223231fd16c42b943f00a; __pnahc=0; __tbc=%7Bjzx%7DIFcj-ZhxuNCMjI4-mDfH1NUCZW7-CmMn43P4peooi3pN7s1U6SLs77TJd0_MaIDk7egQVHeoSjUK2k3sjldowD8Ff5A-5DxOArBhtCY3kQmc3ozP8vUOOShHwL0JdQDA3E9l5ifC0NcYbET3aSZxuA; __pat=-18000000; _cb_ls=1; _cb=BLfE4GBNSwJsLxiQ6; AMP_TOKEN=%24NOT_FOUND; __qca=P0-1753552556-1605535506773; mnet_session_depth=2%7C1605535504670; aasd=2%7C1605535505885; __pvi=%7B%22id%22%3A%22v-2020-11-16-15-05-06-660-0XYRWHdQ2XYGbaoP-46b9447a9edebf759b8530b76e3d77fb%22%2C%22domain%22%3A%22.forbes.com%22%2C%22time%22%3A1605535556929%7D; xbc=%7Bjzx%7DTSec02msUmzkbggY3uSB4x2gGnm1UBtgCEjruTUCsjodOn-ho2bBitYYAE8Wj1i1AsluUTc70wVCtGSzun5713YJ_vNU7uygAa3M3ny-XzzOp_CsCgfU3k8e_J8gocbcboz88mUS39sdnXYxb82rI1XecPrFioPfHcuQebQwPSy3ueG7x_j8wu6BCd9t0FTHUw-9eIvfWF1WWnXIvcJfs3MZ5QDIUBA9qEt2a7BQs_lhesgShrkv-PkBiPzR60tXNA8DkrlHZF_puETTlo-Xiw; _chartbeat2=.1594934728317.1605535561012.0000000000000001.BFC6ndInmcUBhHH5EC_OdRH7Niui.1; QSI_HistorySession=https%3A%2F%2Fwww.forbes.com%2Fglobal2000%2F%235197f5e1335d~1605525574002%7Chttps%3A%2F%2Fwww.forbes.com%2Fglobal2000%2F%234f485ec3335d~1605525601420%7Chttps%3A%2F%2Fwww.forbes.com%2Fglobal2000%2F%2367f91b9335d8~1605535512891%7Chttps%3A%2F%2Fwww.forbes.com%2Fglobal2000%2F%234c10589f335d~1605535561525' \
      --compressed
    
  • 共有1个答案

    秦皓君
    2023-03-14

    解决方案是在请求中提供一些额外的Cookie。使其正常工作的最小Cookie集如下:

    curl 'https://www.forbes.com/forbesapi/org/global2000/2020/position/true.json?limit=2000'
    -H 'cookie: notice_behavior=expressed,eu; notice_gdpr_prefs=0,1,2:1a8b5228dd7ff0717196863a5d28ce6c;'   --compressed
    

    由于WebClient抱怨无效字符(:和,),我最终设置了以下最小Cookie:

    @Bean
    public WebClient forbesWebClient() {
        return WebClient.builder()
                .baseUrl(BASE_URL)
                .defaultCookies(cookies -> {
                    cookies.add("notice_behavior", "expressed");
                    cookies.add("notice_gdpr_prefs", "0");
                })
                .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(MB5))
                .build();
    }
    
     类似资料:
    • 我想在Spring WebClient请求链接中发送链接请求参数。例如: https://www.test.com/notification?con=41280440000097 我尝试了以下代码: 但是当我试图设置映射时,我在标记

    • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO

    • 接口请求需要定义如下三层数据: 表单数据 请求数据 响应数据 问题是以下两个,请教各位大佬: 发起请求的时候需要把表单数据转换成请求数据,发起请求。这个过程能简化吗(我的http客户端是 OkHttp)?如果参数很多,多一层转换就会显得很繁琐! 响应数据如果参数命名不是驼峰法,因为客户端是java,要求类属性驼峰法命名,这个要如何解决?有类似 springboot jpa 中的 @Column(n

    • 我正在尝试基于非阻塞NIO消息开发自己的通信库。我已经阅读了1000篇关于它的教程和书中的章节,我认为最后我有了一些可以在几乎没有同时连接的情况下工作的东西。但是当我在服务器端有很多连接共存时,我遇到了一些问题。 我有4个私有方法的典型选择器实现:accept、finishConnect、read和write。我的问题在于前两个:接受和完成连接。 当客户端打开一个新的套接字,并且一个可接受的键唤醒

    • 我使用Java.NET套接字创建了一个服务器,我尝试通过localhost客户端访问它,它正在接受请求并响应客户端,但当我尝试通过LAN电缆连接从另一台计算机远程访问它时,它不接受任何连接,即使它正在监听本地端口(9999),然后为了查看端口是否不工作,我将Apache Web Server配置为监听端口(9999),它确实工作,所以我将它设置为监听不同的端口,但没有运气,并尝试打开防火墙上的各种

    • 问题内容: 我正在用Java编写一个简单的客户端,以允许可重用​​通过RESTful API访问的专有病毒扫描软件。要上传文件以扫描API,需要先使用Connect(连接),然后再要求将文件发布到服务器。在对Connect的响应中,服务器设置了cookie,随后将需要cookie 来发布文件。我当前在客户端中使用Spring 。 我的问题是我如何访问响应中的cookie,以便随后将其转发回服务器?