Set the User-Agent HTTP header so we can download XML files from www.w3.org

https://sourceforge.net/p/xml-copy-editor/discussion/475215/thread/223a81b85b/

Xerces-C has to be patched https://github.com/apache/xerces-c/pull/1
This commit is contained in:
Zane U. Ji 2018-11-19 00:34:22 +08:00
parent 2968f331a0
commit 621be4257a
3 changed files with 111 additions and 0 deletions

View File

@ -20,6 +20,7 @@
#include "wrapxerces.h"
#include "pathresolver.h"
#include "xercesnetaccessor.h"
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/sax2/XMLReaderFactory.hpp>
@ -46,10 +47,16 @@ void WrapXerces::Init ( bool enableNetAccess ) throw()
Initializer ()
{
XMLPlatformUtils::Initialize();
mOriginalNetAccessor = XMLPlatformUtils::fgNetAccessor;
if ( mOriginalNetAccessor != NULL )
{
mOriginalNetAccessor = new XercesNetAccessor ( mOriginalNetAccessor );
}
}
~Initializer()
{
delete mOriginalNetAccessor;
XMLPlatformUtils::Terminate();
}
} dummy;

62
src/xercesnetaccessor.cpp Normal file
View File

@ -0,0 +1,62 @@
/*
* Copyright 2018 Zane U. Ji.
*
* This file is part of Xml Copy Editor.
*
* Xml Copy Editor is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* Xml Copy Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Xml Copy Editor; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "xercesnetaccessor.h"
#include "xmlcopyeditorcopy.h"
#include <wx/string.h>
#include <string.h>
#include <string>
const static char USER_AGENT[] = "User-Agent:";
XercesNetAccessor::XercesNetAccessor ( XMLNetAccessor *netAccessor )
: mNetAccessor ( netAccessor )
{
}
const XMLCh *XercesNetAccessor::getId() const
{
return mNetAccessor->getId();
}
BinInputStream *XercesNetAccessor::makeNew (
const XMLURL &urlSrc,
const XMLNetHTTPInfo *httpInfo /* = 0 */
) {
XMLNetHTTPInfo info;
if ( httpInfo != NULL )
{
info = *httpInfo;
}
std::string headers ( info.fHeaders, info.fHeadersLen );
if ( headers.find ( USER_AGENT ) == std::string::npos )
{
headers.append ( USER_AGENT );
headers.append ( " xmlcopyeditor/" );
headers.append ( wxString ( ABOUT_VERSION ).utf8_str() );
headers.append ( "\r\n" );
info.fHeaders = headers.c_str();
info.fHeadersLen = headers.length();
}
return mNetAccessor->makeNew ( urlSrc, &info );
}

42
src/xercesnetaccessor.h Normal file
View File

@ -0,0 +1,42 @@
/*
* Copyright 2018 Zane U. Ji.
*
* This file is part of Xml Copy Editor.
*
* Xml Copy Editor is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* Xml Copy Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Xml Copy Editor; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef XERCESNETACCESSOR_H_
#define XERCESNETACCESSOR_H_
#include <xercesc/util/XMLNetAccessor.hpp>
using namespace xercesc;
class XercesNetAccessor : public XMLNetAccessor
{
public:
XercesNetAccessor ( XMLNetAccessor *netAccesor );
virtual const XMLCh *getId() const;
virtual BinInputStream *makeNew ( const XMLURL &urlSrc,
const XMLNetHTTPInfo *httpInfo = 0);
protected:
XMLNetAccessor *mNetAccessor;
};
#endif /* XERCESNETACCESSOR_H_ */