Ticket UUID: | 6a71dbe6ece710a81d6188ff8075ce4d1dc6b89a | |||
Title: | http encoding error not brought up | |||
Type: | Bug | Version: | 8.6.4 | |
Submitter: | oehhar | Created on: | 2015-05-12 15:58:18 | |
Subsystem: | 29. http Package | Assigned To: | nobody | |
Priority: | 5 Medium | Severity: | Minor | |
Status: | Closed | Last Modified: | 2018-05-15 21:04:40 | |
Resolution: | Fixed | Closed By: | oehhar | |
Closed on: | 2018-05-15 21:04:40 | |||
Description: |
As found out by Luc Monier on clt https://groups.google.com/forum/#!topic/comp.lang.tcl/B6afDJQg8LA, the following http request fails 8.6 and succeeded on 8.5: % package require http 2.8.8 % set organism_name "nipah" nipah % set xml " <?xml version=\"1.0\" encoding=\"UTF-8\"?> <orgPdbQuery> <version>B0905</version> <queryType>org.pdb.query.simple.OrganismQuery</queryType> <description>Organism Search : Organism Name=$organism_name </description> <organismName>$organism_name</organismName> </orgPdbQuery> " % set url "http://www.rcsb.org/pdb/rest/search" % ::http::config -urlencoding utf-8 % set tok [::http::geturl $url -query $xml -type "application/x-www-form-urlencoded"] can't read "coding": no such variable The following patch is a first step to bring up the real error message: --- http-2.8.8.tm +++ http-2.8.9.tm @@ -11,7 +11,7 @@ package require Tcl 8.6 # Keep this in sync with pkgIndex.tcl and with the install directories in # Makefiles -package provide http 2.8.8 +package provide http 2.8.9 namespace eval http { # Allow resourcing to not clobber existing data @@ -1299,7 +1299,7 @@ set state(body) [zlib $coding $state(body)] } } err]} { - Log "error doing $coding '$state(body)'" + Log "error doing coding '$state(body)' : $err" return [Finish $token $err] } If this patch is applied, the output is as follows: ... init as above % proc http::Log args {puts **$args} % set tok [::http::geturl $url -query $xml -type "application/x-www-form-urlencoded"] **{Using sock02E7DC30 for www.rcsb.org:80} {} **{error doing coding '1WP7 2VSM 2VWD 3D11 3D12 3N27 4CO6 4GJW 4N5B ' : unsupported content-encoding "text/plain"} **{Closing socket sock02E7DC30 (no connection info)} Ok, "text/plain" missing in coding tables. Thus patch: @@ -1473,6 +1473,7 @@ gzip - x-gzip { lappend r gunzip } compress - x-compress { lappend r decompress } identity {} + text/plain {} default { return -code error "unsupported content-encoding \"$coding\"" } This gives the desired result: ... init as above % proc http::Log args {puts **$args} % set tok [::http::geturl $url -query $xml -type "application/x-www-form-urlencoded"] **{Using sock02E63980 for www.rcsb.org:80} {} **{Closing socket sock02E63980 (no connection info)} ::http::3 % set rep [::http::data $tok] 1WP7 2VSM 2VWD 3D11 3D12 3N27 4CO6 4GJW 4N5B I am not sure what I am doing. The patch just looks reasonable for the case. Thank you, Harald | |||
User Comments: |
dkf added on 2015-05-14 08:27:50:
I've also stopped it showing the body there; if that's containing compressed data, there's really no way that's going to display properly anywhere. dkf added on 2015-05-14 08:26:12: I've fixed the error handling. It now produces the (correct) error message: unsupported content-encoding "text/plain"I don't plan to "fix" that. Sometimes things are just really badly broken and need to be called out as such. dkf added on 2015-05-13 23:42:23: That's a very broken webservice. But maybe we should improve our error handling. dgp added on 2015-05-13 23:34:10: Good catch on the programming error in the [Log]. For the actual error, I'm far from an HTTP expert, but is text/plain really the name of a valid ContentEncoding value? I thought that was a ContentType ? Are we adding to the list of ways this service is broken? |