ruby / ruby/net-http

Unquote and unescape Content-Type: charset [RFC7230]

Offen Anfängerfreundlich
#267 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Ruby
Sterne
148
Forks
95
Ø Merge
10 Std. 54 Min.
Gemergte PRs (30 T.)
4

Beschreibung

uri = URI('http://127.0.0.1:8080')
http = Net::HTTP.new(uri.hostname, uri.port)
http.response_body_encoding = true
http.send_request('GET', uri.request_uri)
/opt/homebrew/lib/ruby/gems/4.0.0/gems/net-http-0.9.1/lib/net/http/response.rb:381:in 'String#force_encoding': unknown encoding name - "UTF-8" (ArgumentError)
    @body.force_encoding(enc) if enc
	from /opt/homebrew/lib/ruby/gems/4.0.0/gems/net-http-0.9.1/lib/net/http/response.rb:381:in 'Net::HTTPResponse#read_body'
$ curl -I http://127.0.0.1:8080/
Content-Type: text/html; charset="UTF-8"
Server: WEBrick/1.9.2 (Ruby/4.0.1/2026-01-13)

$ open https://www.rfc-editor.org/rfc/rfc7230#section-3.2.6

[3.2.6](https://www.rfc-editor.org/rfc/rfc7230#section-3.2.6). Field Value Components
quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE

$ git diff
diff --git a/lib/net/http/header.rb b/lib/net/http/header.rb
index 797a3be..fe026ae 100644
--- a/lib/net/http/header.rb
+++ b/lib/net/http/header.rb
@@ -762,3 +762,3 @@ module Net::HTTPHeader
       k, v = *param.split('=', 2)
-      result[k.strip] = v.strip
+      result[k.strip] = v.strip.gsub(/\A"(.*?)(?<!\\)"\z/) { $1.gsub(/\\(.)/, '\1') }.strip
     end
http.send_request('GET', uri.request_uri)
# #<Net::HTTPOK 200 OK readbody=true>

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in lib/net/http/header.rb beim Parameter-Parsing-Code, der im Issue gezeigt wird, und führe dann die bereitgestellte Net::HTTP-Reproduktion gegen eine Response mit einem in Anführungszeichen gesetzten charset aus. Überprüfe, dass Content-Type-Parameter in Anführungszeichen und mit Escape-Zeichen einen gültigen Encoding-Namen ergeben und dass der Request erfolgreich abgeschlossen wird; füge eine Regressionstestabdeckung hinzu, falls die vorhandenen Tests des Repositorys einen geeigneten Ort dafür bieten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
ruby
Bereich
networking
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
83/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.