Tobias Pape uploaded a new version of WebClient-Core to project The Trunk: http://source.squeak.org/trunk/WebClient-Core-topa.109.mcz
==================== Summary ====================
Name: WebClient-Core-topa.109 Author: topa Time: 6 July 2017, 3:27:22.152308 pm UUID: b795898b-9723-44ab-a429-bceb056f4b90 Ancestors: WebClient-Core-topa.108
As with content-type-charset, cope for content-encoding variability
=============== Diff against WebClient-Core-topa.108 ===============
Item was added: + ----- Method: WebClient>>contentDecoders (in category 'initialize') ----- + contentDecoders + + | result | + result := nil. + (self class environment hasBindingOf: #GZipReadStream) + ifTrue: [result := 'gzip']. + (self class environment hasBindingOf: #BrotliReadStream) + ifTrue: [ result := result ifNil: ['br'] ifNotNil: [:r | r, ', br']]. + ^ result!
Item was changed: ----- Method: WebClient>>httpGet:do: (in category 'methods') ----- httpGet: urlString do: aBlock "GET the response from the given url" "(WebClient httpGet: 'http://www.squeak.org') content"
| request | self initializeFromUrl: urlString. request := self requestWithUrl: urlString. request method: 'GET'. + userAgent ifNotNil:[:ua | request headerAt: 'User-Agent' put: ua]. + self contentDecoders ifNotNil: [:decoders | request headerAt: 'Accept-Encoding' put: decoders]. - userAgent ifNotNil:[request headerAt: 'User-Agent' put: userAgent]. - request headerAt: 'Accept-Encoding' put: 'gzip'. aBlock value: request. ^self sendRequest: request !
Item was added: + ----- Method: WebMessage>>decoderForContentEncoding (in category 'private') ----- + decoderForContentEncoding + + (self headerAt: 'content-encoding') = 'gzip' + ifTrue: [^ self class environment + at: #GZipReadStream ifAbsent: [self error: 'GZip encoded responses not supported']]. + (self headerAt: 'content-encoding') = 'br' + ifTrue: [^ self class environment + at: #BrotliReadStream ifAbsent: [self error: 'Brotli encoded responses not supported']]. + ^ nil!
Item was changed: ----- Method: WebMessage>>getContentWithProgress: (in category 'private') ----- getContentWithProgress: progressBlockOrNil "Reads available content and returns it."
| length result | length := self contentLength. result := (stream isBinary ifTrue:[ ByteArray ] ifFalse: [ ByteString ]) new: (length ifNil: [ 1000 ]) streamContents: [ :outputStream | self streamFrom: stream to: outputStream size: length progress: progressBlockOrNil ]. + self decoderForContentEncoding ifNotNil: [:decoder | + result := (decoder on: result) upToEnd]. - (self headerAt: 'content-encoding') = 'gzip' ifTrue: [ - result := (GZipReadStream on: result) upToEnd]. self textConverterForContentType ifNotNil: [:converter | result := result convertFromWithConverter: converter]. ^ result !