I am using a combined batch and java script I found to retrieve the html from a web site using a batch file and one we address is not returning the desired output as it appears when I use the url in firefox.
The script I am using to pull the html is:
@if (@This==@IsBatch) @then
@echo off
rem **** batch zone *********************************************************
setlocal enableextensions disabledelayedexpansion
rem Batch file will delegate all the work to the script engine
if not "%~1"=="" (
cscript //E:JScript "%~dpnx0" %1
)
rem End of batch area. Ensure batch ends execution before reaching
rem javascript zone
exit /b
@end
// **** Javascript zone *****************************************************
// Instantiate the needed component to make url queries
var http = WScript.CreateObject('MSXML2.ServerXMLHTTP.6.0');
// Retrieve the url parameter
var url = WScript.Arguments.Item(0)
// Make the request
http.open("GET", url, false);
http.send();
// If we get a OK from server (status 200), echo data to console
if (http.status === 200) WScript.StdOut.Write(http.responseText);
// All done. Exit
WScript.Quit(0);
The url I am trying to feed the script is http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=["Arabian+Nights"]
or alternativly http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=["Arabian Nights"]
the problem seems to be the space/+ as none of the other urls I feed it are using a space or +
The way I am calling the script to pull the html is:
call callurl.cmd "http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=["Arabian+Nights"]"
edit: found original thread the script is from Open a URL without using a browser from a batch file
only change i made was Msxml2.XMLHTTP.6.0 was changed to MSXML2.ServerXMLHTTP.6.0 because original script couldn't load sites due to security from what I found.
In this case the problem is that the windows scripting host consumes the double quotes included in the arguments.
npocmaka has shown one of the solutions: encode the quotes in the url. From my point of view it is the correct one (double quote is an unsafe character and should be encoded).
Another solution is to not to pass the URL as an argument to the script, but to store it in a environment variable and then in the javascript part retrieve the value from the variable
@if (@This==@IsBatch) @then
@echo off
rem **** batch zone *********************************************************
setlocal enableextensions disabledelayedexpansion
rem Ensure we get a correct reference to current batch file
call :getFullBatchReference _f0
rem Batch file will delegate all the work to the script engine
if not "%~1"=="" (
set "URL=%~1"
cscript //nologo //E:JScript "%_f0%"
)
rem Ensure batch ends execution before reaching javascript zone
exit /b %errorlevel%
:getFullBatchReference returnVar
set "%~1=%~f0"
goto :eof
@end
// **** Javascript zone *****************************************************
// Instantiate the needed component to make url queries
var http = WScript.CreateObject('MSXML2.ServerXMLHTTP.6.0');
// Retrieve the url parameter from environment variable
var url = WScript.CreateObject('WScript.Shell')
.Environment('Process')
.Item('URL');
var exitCode = 0;
try {
// Make the request
http.open("GET", url, false);
http.send();
// If we get a OK from server (status 200), echo data to console
if (http.status === 200) {
WScript.StdOut.Write(http.responseText);
} else {
exitCode = http.status;
};
} catch (e) {
// Something failed
WScript.StdOut.Write('ERROR: ' + e.description );
exitCode = 1;
};
// All done. Exit
WScript.Quit( exitCode );
Now, it can be called as
geturl.cmd "http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=["Arabian+Nights"]"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With