From dfca520857fdc67c431bf811c14d174b123a88a6 Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 10 Apr 2025 15:09:46 +0800 Subject: [PATCH] =?UTF-8?q?=20=E4=BF=AE=E5=A4=8Dhttp=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E7=9A=84=E4=B8=A4=E4=B8=AA=E9=97=AE=E9=A2=98=EF=BC=8C=E5=8E=9F?= =?UTF-8?q?http=E4=BB=A3=E7=90=86=E5=8A=9F=E8=83=BD=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=EF=BC=88#2988=EF=BC=89=EF=BC=9Ad593267=20(#4219)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. CONNECT请求添加Host字段, 解决400 bad request问题; 2. HLS拉取第2个ts分片时,重新设置http代理,解决第2个分片及后续分片未走代理的问题。 --- src/Http/HlsPlayer.cpp | 4 ++++ src/Http/HttpClient.cpp | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Http/HlsPlayer.cpp b/src/Http/HlsPlayer.cpp index 2443297e..3058c09b 100644 --- a/src/Http/HlsPlayer.cpp +++ b/src/Http/HlsPlayer.cpp @@ -133,6 +133,10 @@ void HlsPlayer::fetchSegment() { if (!(*this)[Client::kNetAdapter].empty()) { _http_ts_player->setNetAdapter((*this)[Client::kNetAdapter]); } + } else { + // 每次请求新的ts片段时重置HttpTSPlayer状态 + _http_ts_player->clear(); + _http_ts_player->setProxyUrl((*this)[Client::kProxyUrl]); } Ticker ticker; diff --git a/src/Http/HttpClient.cpp b/src/Http/HttpClient.cpp index 23b97b42..a3651064 100644 --- a/src/Http/HttpClient.cpp +++ b/src/Http/HttpClient.cpp @@ -103,6 +103,8 @@ void HttpClient::clear() { _user_set_header.clear(); _body.reset(); _method.clear(); + // 重置代理连接状态 + _proxy_connected = false; clearResponse(); } @@ -182,6 +184,8 @@ void HttpClient::onConnect_l(const SockException &ex) { _path.clear(); } else { printer << "CONNECT " << _last_host << " HTTP/1.1\r\n"; + printer << "Host: " << _last_host << "\r\n"; + printer << "User-Agent: " << kServerName << "\r\n"; printer << "Proxy-Connection: keep-alive\r\n"; if (!_proxy_auth.empty()) { printer << "Proxy-Authorization: Basic " << _proxy_auth << "\r\n"; @@ -482,9 +486,14 @@ void HttpClient::setProxyUrl(string proxy_url) { } bool HttpClient::checkProxyConnected(const char *data, size_t len) { - auto ret = strstr(data, "HTTP/1.1 200 Connection established"); - _proxy_connected = ret != nullptr; - return _proxy_connected; + string response(data, len); + if (response.find("HTTP/1.1 200") != string::npos || response.find("HTTP/1.0 200") != string::npos) { + _proxy_connected = true; + return true; + } + + _proxy_connected = false; + return false; } void HttpClient::setAllowResendRequest(bool allow) {