validator/httpd/cgi-bin check,1.626,1.627

Update of /sources/public/validator/httpd/cgi-bin
In directory hutz:/tmp/cvs-serv28905/httpd/cgi-bin

Modified Files:
	check 
Log Message:
Change validator.nu interface to "POST entity body" mode (#6296).


Index: check
===================================================================
RCS file: /sources/public/validator/httpd/cgi-bin/check,v
retrieving revision 1.626
retrieving revision 1.627
diff -u -d -r1.626 -r1.627
--- check	4 Jan 2009 20:08:26 -0000	1.626
+++ check	4 Jan 2009 20:35:08 -0000	1.627
@@ -57,6 +57,7 @@
 use HTML::Encoding       0.52 qw();
 use HTML::Parser         3.25 qw(); # Need 3.25 for $p->ignore_elements.
 use HTML::Template       2.6  qw(); # Need 2.6 for path param, other things.
+use HTTP::Headers::Util       qw();
 use HTTP::Request             qw();
 use HTTP::Headers::Auth       qw(); # Needs to be imported after other HTTP::*.
 use SGML::Parser::OpenSP      qw();
@@ -815,10 +816,35 @@
   $File->{ParserName} = "validator.nu";
   $File->{ParserOpts} = "";
 
-  use HTTP::Request::Common;
+  my $url = URI->new($CFG->{External}->{HTML5});
+  $url->query_form(out => "xml");
 
-  my $res = $ua->request(POST "$CFG->{External}->{HTML5}", Content_Type => 'form-data',
-  Content  => [out => "xml", content => Encode::encode_utf8(join "\n", @{$File->{Content}})]);
+  my $req = HTTP::Request->new(POST => $url);
+
+  if ($File->{Opt}->{DOCTYPE} || $File->{Charset}->{Override}) {
+    # Doctype or charset overridden, need to use $File->{Content} in UTF-8
+    # because $File->{Bytes} is not affected by the overrides.  This will
+    # most likely be a source of errors about internal/actual charset
+    # differences as long as our transcoding process does not "fix" the
+    # charset info in XML declaration and meta http-equiv (any others?).
+
+    $req->content_type("$File->{ContentType}; charset=UTF-8");
+    $req->content(Encode::encode_utf8(join("\n", @{$File->{Content}})));
+  }
+  else {
+    # Pass original bytes, Content-Type and charset as-is.
+    # We trust that our and validator.nu's interpretation of line numbers
+    # is the same (regardless of EOL chars used in the document).
+
+    my @content_type = ($File->{ContentType} => undef);
+    push(@content_type, charset => $File->{Charset}->{HTTP})
+      if $File->{Charset}->{HTTP};
+
+    $req->content_type(HTTP::Headers::Util::join_header_words(@content_type));
+    $req->content_ref(\$File->{Bytes});
+  }
+
+  my $res = $ua->request($req);
   if (! $res->is_success()) {
     $File->{'Error Flagged'} = TRUE;
     $File->{Templates}->{Error}->param(fatal_no_checker  => TRUE);

Received on Sunday, 4 January 2009 20:35:20 UTC