mirror of
https://github.com/kennethreitz/httpbin.git
synced 2026-06-05 06:46:16 +00:00
GH-125: Support multiple headers with same key
Fixes: GH-125
This commit is contained in:
+12
-6
@@ -16,7 +16,7 @@ import random
|
||||
import base64
|
||||
|
||||
from flask import Flask, Response, request, render_template, redirect, jsonify, make_response
|
||||
from werkzeug.datastructures import WWWAuthenticate
|
||||
from werkzeug.datastructures import WWWAuthenticate, MultiDict
|
||||
from werkzeug.http import http_date
|
||||
from werkzeug.wrappers import BaseResponse
|
||||
from six.moves import range as xrange
|
||||
@@ -267,14 +267,20 @@ def view_status_code(codes):
|
||||
@app.route('/response-headers')
|
||||
def response_headers():
|
||||
"""Returns a set of response headers from the query string """
|
||||
headers = CaseInsensitiveDict(request.args.items())
|
||||
response = jsonify(headers.items())
|
||||
headers = MultiDict(request.args.items(multi=True))
|
||||
response = jsonify(headers.lists())
|
||||
|
||||
while True:
|
||||
content_len_shown = response.headers['Content-Length']
|
||||
response = jsonify(response.headers.items())
|
||||
for key, value in headers.items():
|
||||
response.headers[key] = value
|
||||
d = {}
|
||||
for key in response.headers.keys():
|
||||
value = response.headers.get_all(key)
|
||||
if len(value) == 1:
|
||||
value = value[0]
|
||||
d[key] = value
|
||||
response = jsonify(d)
|
||||
for key, value in headers.items(multi=True):
|
||||
response.headers.add(key, value)
|
||||
if response.headers['Content-Length'] == content_len_shown:
|
||||
break
|
||||
return response
|
||||
|
||||
@@ -24,6 +24,18 @@ class HttpbinTestCase(unittest.TestCase):
|
||||
httpbin.app.debug = True
|
||||
self.app = httpbin.app.test_client()
|
||||
|
||||
def test_response_headers_simple(self):
|
||||
response = self.app.get('/response-headers?animal=dog')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.headers.get_all('animal'), ['dog'])
|
||||
assert json.loads(response.data.decode('utf-8'))['animal'] == 'dog'
|
||||
|
||||
def test_response_headers_multi(self):
|
||||
response = self.app.get('/response-headers?animal=dog&animal=cat')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.headers.get_all('animal'), ['dog', 'cat'])
|
||||
assert json.loads(response.data.decode('utf-8'))['animal'] == ['dog', 'cat']
|
||||
|
||||
def test_base64(self):
|
||||
greeting = u'Здравствуй, мир!'
|
||||
b64_encoded = _string_to_base64(greeting)
|
||||
|
||||
Reference in New Issue
Block a user