diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index 2aa7f27fee..5be7749376 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -73,6 +73,8 @@ export type APIRequestFinishedEvent = { statusMessage: string; body?: Buffer; timings: har.Timings; + serverIPAddress?: string; + serverPort?: number; }; type SendRequestOptions = https.RequestOptions & { @@ -302,6 +304,8 @@ export abstract class APIRequestContext extends SdkObject { let tcpConnectionAt: number | undefined; let tlsHandshakeAt: number | undefined; let requestFinishAt: number | undefined; + let serverIPAddress: string | undefined; + let serverPort: number | undefined; const request = requestConstructor(url, requestOptions as any, async response => { const responseAt = monotonicTime(); @@ -328,6 +332,8 @@ export abstract class APIRequestContext extends SdkObject { cookies, body, timings, + serverIPAddress, + serverPort, }; this.emit(APIRequestContext.Events.RequestFinished, requestFinishedEvent); }; @@ -483,6 +489,9 @@ export abstract class APIRequestContext extends SdkObject { socket.on('lookup', () => { dnsLookupAt = monotonicTime(); }); socket.on('connect', () => { tcpConnectionAt = monotonicTime(); }); socket.on('secureConnect', () => { tlsHandshakeAt = monotonicTime(); }); + + serverIPAddress = socket.remoteAddress; + serverPort = socket.remotePort; }); request.on('finish', () => { requestFinishAt = monotonicTime(); }); diff --git a/packages/playwright-core/src/server/har/harTracer.ts b/packages/playwright-core/src/server/har/harTracer.ts index 76da6682d4..6dffaba894 100644 --- a/packages/playwright-core/src/server/har/harTracer.ts +++ b/packages/playwright-core/src/server/har/harTracer.ts @@ -208,6 +208,8 @@ export class HarTracer { if (!harEntry) return; + harEntry.serverIPAddress = event.serverIPAddress; + harEntry._serverPort = event.serverPort; harEntry.response.status = event.statusCode; harEntry.response.statusText = event.statusMessage; harEntry.response.httpVersion = event.httpVersion; diff --git a/tests/library/har.spec.ts b/tests/library/har.spec.ts index cc65127e3f..cd218e2ac5 100644 --- a/tests/library/har.spec.ts +++ b/tests/library/har.spec.ts @@ -831,6 +831,9 @@ it('should include API request', async ({ contextFactory, server }, testInfo) => ssl: expect.any(Number), wait: expect.any(Number), })); + + expect(entry.serverIPAddress).toBeDefined(); + expect(entry._serverPort).toEqual(server.PORT); }); it('should respect minimal mode for API Requests', async ({ contextFactory, server }, testInfo) => {