前言

每个Playwright浏览器上下文都有与其关联的APIRequestContext实例,该实例与浏览器上下文共享cookie存储,可以通过browser_context.request或page.request访问。也可以通过调用api_request.new_context()手动创建一个新的APIRequest上下文实例。

通过浏览器发请求

可以通过browser_context.request或page.request发送接口请求,该实例与浏览器上下文共享cookie存储。

from playwright.sync_api import sync_playwright, expect
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


REPO = "test-repo-1"
USER = "github-username"
API_TOKEN = "xx1122"


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context(base_url="https://api.github.com")
    # context 上下文创建 request 请求对象
    api_request_context = context.request
    page = context.new_page()

    # 访问浏览器页面
    page.goto('https://api.github.com')

    # Create a repository.
    response = api_request_context.post(
        "/user/repos",
        headers={
            "Accept": "application/vnd.github.v3+json",
            # Add GitHub personal access token.
            "Authorization": f"token {API_TOKEN}",
        },
        data={"name": REPO},
    )
    assert response.ok
    assert response.json()["name"] == REPO

    # Delete a repository.
    response = api_request_context.delete(
        f"/repos/{USER}/{REPO}",
        headers={
            "Accept": "application/vnd.github.v3+json",
            # Add GitHub personal access token.
            "Authorization": f"token {API_TOKEN}",
        },
    )
    assert response.ok
    assert response.body() == '{"status": "ok"}'

也可以通过page.request() 发送接口请求

from playwright.sync_api import sync_playwright, expect

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    page.goto('https://www.cnblogs.com/yoyoketang/')


    # 发post请求
    resp = page.request.post(
        url="http://www.example.com/",
        data={"user": "test", "email": "123@qq.com"}
    )
    print(resp.status)
    print(resp.headers)
    print(resp.body())

APIRequestContext

不打开浏览器的情况下,直接发接口请求也是可以的

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


with sync_playwright() as p:
    context = p.request.new_context()
    response = context.get("https://example.com/user/repos")
    assert response.ok
    assert response.status == 200
    assert response.headers["content-type"] == "application/json; charset=utf-8"
    assert response.json()["name"] == "foobar"
    assert response.body() == '{"status": "ok"}'

文章转自:https://www.cnblogs.com/yoyoketang/p/17662028.html