Skip to content

cookie处理

简介

cookie 是服务器发送到用户浏览器并保存到用户本地的一小块数据,会在浏览器再下次向同一服务器再发起请求时被携带并发送到服务器上。通常用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。

原理:

Cookie 技术会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。

客户端再向服务器端发送请求的时候,客户端会在请求报文中加入 Cookie 值后发送出去。服务器端会检查客户端发送的请求中有没有 Cookie 值,然后对比服务器上的记录,最后确定是哪一个客户端,之前的信息状态是什么

Cookie 使用场景:

  1. 在接口测试过程中,很多情况下,需要发送的请求附带 cookies,才会得到正常的响应的结果。所以使用 python+requests 进行接口自动化测试也是同理,需要在构造接口测试用例时加入 cookie

  2. 传递 Cookie 的两种方式:

    • 通过请求头信息传递
    • 通过请求的关键字参数 cookies 传递

应用场景

  • 判断用户是否已经登录
  • 记录用户登录信息(比如用户名,上次登录时间)
  • 记录用户搜索关键词

Python:

url = 'https://httpbin.ceshiren.com/cookies'
headers = {Cookie":'working=1','User-Agent': 'python-requests/2.23.0'}
r = requests.get(url, headers=headers)
print(r.request.headers)

Java:

import io.restassured.response.Response;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;

public class TestRequestHeaders {

    @Test
    void testRequestHeaders() {
        // 定义请求的URL
        String url = "https://httpbin.ceshiren.com/cookies";

        // 发送请求并获取响应,同时设置请求头
        Response response = given()
                .header("Cookie", "working=1")
                .header("User-Agent", "python-requests/2.23.0")
                .when()
                .get(url)
                .then()
                .extract()
                .response();

        // 打印请求头
        System.out.println(response.getHeaders());
    }
}

使用 cookies 参数

url = 'https://httpbin.ceshiren.com/cookies'
headers = {'User-Agent': 'python-requests/2.23.0'}
cookies = dict(cookies_are='working2')
r = requests.get(url, headers=headers , cookies=cookies)
print(r.request.headers)

Java:

import io.restassured.response.Response;
import io.restassured.http.Headers;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;

public class TestRequestHeadersAndCookies {

    @Test
    void testSetHeaderAndCookies() {
        // 定义请求的URL
        String url = "https://httpbin.ceshiren.com/cookies";

        // 发送请求并获取响应,同时设置请求头和 Cookies
        Response response = given()
                .header("User-Agent", "Hogwarts")  // 设置请求头
                .cookie("cookies_are", "working2")  // 设置 Cookies
                .when()
                .get(url)  // 发送请求
                .then()
                .extract()
                .response();

        // 打印请求头
        System.out.println("Request Headers:");
        Headers headers = response.getHeaders();
        headers.forEach(header ->
            System.out.println(header.getName() + ": " + header.getValue())
        );
    }
}

总结

  • 自定义 header
  • 使用 cookies 参数