openai / openai/openai-python

Bug:- websocket_base_url derivation corrupts URLs containing http:// in query params

Open Beginner friendly
#3,294 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

upstream
Dominant language
Python
Stars
31.6k
Forks
5.7k
Avg merge
1d 6h
Merged PRs (30d)
96

Description

Confirm this is an issue with the Python library and not an underlying OpenAI API
This is an issue with the Python library

Describe the bug
When no websocket_base_url is provided, the SDK derives one from base_url using Python's str.replace():

base_url.replace("https://", "wss://").replace("http://", "ws://")

str.replace() replaces all occurrences, not just the scheme prefix. If http:// appears anywhere else in the URL (query parameter, path segment, etc.), it gets incorrectly rewritten too.

To Reproduce

from openai import OpenAI

client = OpenAI(
    api_key="sk-test",
    base_url="https://proxy.com/forward?target=http://backend.internal/v1"
)
print(client.websocket_base_url)

Expected result

wss://proxy.com/forward?target=http://backend.internal/v1

Actual result

wss://proxy.com/forward?target=ws://backend.internal/v1

Suggested fix
Replace only the scheme prefix, not all occurrences:

if base_url.startswith("https://"):
    return "wss://" + base_url[len("https://"):]
elif base_url.startswith("http://"):
    return "ws://" + base_url[len("http://"):]

Environment

  • Library version: latest (main)
  • File: src/openai/_client.py lines ~117–119
  • Python version: 3.x

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in src/openai/_client.py around lines 117–119 and inspect how websocket_base_url is derived when no value is provided. Reproduce the issue with the proxy URL in the report, then verify the resulting URL preserves http:// in the query parameter while changing only the base scheme. Add regression coverage using the reported example and run the relevant client tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
76/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.