Created
October 1, 2015 09:59
-
-
Save narze/a9cef48a57490bdaf30b to your computer and use it in GitHub Desktop.
open url from batch file (https://github.com/npocmaka/batch.scripts/raw/master/hybrids/jscript/winhttpjs.bat)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @if (@X)==(@Y) @end /* JScript comment | |
| @echo off | |
| rem :: the first argument is the script name as it will be used for proper help message | |
| cscript //E:JScript //nologo "%~f0" "%~nx0" %* | |
| exit /b %errorlevel% | |
| @if (@X)==(@Y) @end JScript comment */ | |
| var url = "http://192.168.0.178/open" // change this url to your needs | |
| var ARGS = WScript.Arguments; | |
| var scriptName=ARGS.Item(0); | |
| var saveTo=""; | |
| var user=0; | |
| var pass=0; | |
| var proxy=0; | |
| var bypass=0; | |
| var proxy_user=0; | |
| var proxy_pass=0; | |
| var certificate=0; | |
| var force=true; | |
| var body=""; | |
| //ActiveX objects | |
| var WinHTTPObj = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); | |
| var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject"); | |
| var AdoDBObj = new ActiveXObject("ADODB.Stream"); | |
| // HttpRequest SetCredentials flags. | |
| var proxy_settings=0; | |
| // | |
| HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0; | |
| HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1; | |
| //timeouts and their default values | |
| var RESOLVE_TIMEOUT = 0; | |
| var CONNECT_TIMEOUT = 90000; | |
| var SEND_TIMEOUT = 90000; | |
| var RECEIVE_TIMEOUT = 90000; | |
| //HttpRequestMethod | |
| var http_method='GET'; | |
| //header | |
| var header_file=""; | |
| //report | |
| var reportfile=""; | |
| //test-this: | |
| var use_stream=false; | |
| //autologon policy | |
| var autologon_policy=1; //0,1,2 | |
| //headers will be stored as multi-dimensional array | |
| var headers=[]; | |
| //user-agent | |
| var ua=""; | |
| //escape URL | |
| var escape=false; | |
| function printHelp(){ | |
| WScript.Echo(scriptName + " - sends HTTP request and saves the request body as a file and/or a report of the sent request"); | |
| WScript.Echo(scriptName + " url [-force yse|no] [-user username -password password] [-proxy proxyserver:port] [-bypass bypass_list]"); | |
| WScript.Echo(" [-proxyuser proxy_username -proxypassword proxy_password] [-certificate certificateString]"); | |
| WScript.Echo(" [-method GET|POST|PATCH|DELETE|HEAD|OPTIONS|CONNECT]"); | |
| WScript.Echo(" [-saveTo file] - to print response to console use con"); | |
| WScript.Echo(" [-sendTimeout int(milliseconds)]"); | |
| WScript.Echo(" [-resolveTimeout int(milliseconds)]"); | |
| WScript.Echo(" [-connectTimeout int(milliseconds)]"); | |
| WScript.Echo(" [-receiveTimeout int(milliseconds)]"); | |
| WScript.Echo(" [-autologonPolicy 1|2|3]"); | |
| WScript.Echo(" [-proxySettings 1|2|3] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384059(v=vs.85).aspx)"); | |
| //header | |
| WScript.Echo(" [-headers-file header_file]"); | |
| //reportfile | |
| WScript.Echo(" [-reportfile reportfile]"); | |
| WScript.Echo(" [-ua user-agent]"); | |
| WScript.Echo(" [-ua-file user-agent-file]"); | |
| WScript.Echo(" [-escape yes|no]"); | |
| WScript.Echo(" [-body body-string]"); | |
| WScript.Echo(" [-body-file body-file]"); | |
| WScript.Echo("-force - decide to not or to overwrite if the local files exists"); | |
| WScript.Echo("proxyserver:port - the proxy server"); | |
| WScript.Echo("bypass- bypass list"); | |
| WScript.Echo("proxy_user , proxy_password - credentials for proxy server"); | |
| WScript.Echo("user , password - credentials for the server"); | |
| WScript.Echo("certificate - location of SSL certificate"); | |
| WScript.Echo("method - what HTTP method will be used.Default is GET"); | |
| WScript.Echo("saveTo - save the responce as binary file"); | |
| WScript.Echo(" "); | |
| WScript.Echo("Header file should contain key:value pairs.Lines starting with \"#\" will be ignored."); | |
| WScript.Echo("value should NOT be enclosed with quotes"); | |
| WScript.Echo(" "); | |
| WScript.Echo("Examples:"); | |
| WScript.Echo(scriptName +" http://somelink.com/somefile.zip -saveTo c:\\somefile.zip -certificate \"LOCAL_MACHINE\\Personal\\My Middle-Tier Certificate\""); | |
| WScript.Echo(scriptName +" http://somelink.com/something.html -method POST -certificate \"LOCAL_MACHINE\\Personal\\My Middle-Tier Certificate\" -header c:\\header_file -reportfile c:\\reportfile.txt"); | |
| WScript.Echo(scriptName +"\"http://somelink\" -method POST -header hdrs.txt -reportfile reportfile2.txt -saveTo responsefile2 -ua \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\" -body-file some.json"); | |
| } | |
| function parseArgs(){ | |
| for (var i=2;i<ARGS.Length-1;i=i+2){ | |
| var arg=ARGS.Item(i).toLowerCase(); | |
| var next=ARGS.Item(i+1); | |
| try { switch(arg) { // the try-catch is set mainly because of the parseInts | |
| case "-force": | |
| if (next == "no") { | |
| force = false; | |
| } | |
| break; | |
| case "-escape": | |
| if (next == "yes") { | |
| escape = true; | |
| } | |
| break; | |
| case "-saveto": | |
| saveTo=next; | |
| break; | |
| case "-user": | |
| user=next; | |
| break; | |
| case "-proxy": | |
| proxy=next; | |
| break; | |
| case "-bypass": | |
| bypass=next; | |
| break; | |
| case "-proxyyser": | |
| proxy_user=next; | |
| break; | |
| case "-proxypassword": | |
| proxy_pass=next; | |
| break; | |
| case "-ua": | |
| ua=next; | |
| break; | |
| case "-ua-file": | |
| ua=readFile(next); | |
| break; | |
| case "-body": | |
| body=next; | |
| break; | |
| case "-usestream": | |
| //WScript.Echo("~~"); | |
| if(next.toLowerCase()==="yes"){use_stream=true}; | |
| break; | |
| case "-body-file": | |
| body=readFile(next); | |
| break; | |
| case "-certificate": | |
| certificate=next; | |
| break; | |
| case "-method": | |
| switch (next.toLowerCase()){ | |
| case "post": | |
| http_method='POST'; | |
| break; | |
| case "get": | |
| http_method='GET'; | |
| break; | |
| case "head": | |
| http_method='HEAD'; | |
| break; | |
| case "put": | |
| http_method='PUT'; | |
| break; | |
| case "options": | |
| http_method='OPTIONS'; | |
| break; | |
| case "connect": | |
| http_method='CONNECT'; | |
| break; | |
| case "patch": | |
| http_method='PATCH'; | |
| break; | |
| case "delete": | |
| http_method='DELETE'; | |
| break; | |
| default: | |
| WScript.Echo("Invalid http method passed " + next); | |
| WScript.Echo("possible values are GET,POST,DELETE,PUT,CONNECT,PATCH,HEAD,OPTIONS"); | |
| WScript.Quit(1326); | |
| break; | |
| } | |
| break; | |
| case "-headers-file": | |
| case "-header": | |
| headers=readPropFile(next); | |
| break; | |
| case "-reportfile": | |
| reportfile=next; | |
| break; | |
| //timeouts | |
| case "-sendtimeout": | |
| SEND_TIMEOUT=parseInt(next); | |
| break; | |
| case "-connecttimeout": | |
| CONNECT_TIMEOUT=parseint(next); | |
| break; | |
| case "-resolvetimeout": | |
| RESOLVE_TIMEOUT=parseInt(next); | |
| break; | |
| case "-receivetimeout": | |
| RECEIVE_TIMEOUT=parseInt(next); | |
| break; | |
| case "-autologonpolicy": | |
| autologon_policy=parseInt(next); | |
| if (autologon_policy>2||autologon_policy<0) { | |
| WScript.Echo("out of autologon policy range"); | |
| WScript.Quit(87); | |
| }; | |
| break; | |
| case "-proxysettings": | |
| proxy_settings=parseInt(next); | |
| if (proxy_settings>2||proxy_settings<0){ | |
| WScript.Echo("out of proxy settings range"); | |
| WScript.Quit(87); | |
| }; | |
| break; | |
| default: | |
| WScript.Echo("Invalid command line switch: "+arg); | |
| WScript.Quit(1405); | |
| break; | |
| }} catch (err){ | |
| WScript.Echo(err.message); | |
| WScript.Quit(1348); | |
| } | |
| } | |
| } | |
| stripTrailingSlash = function(path){ | |
| while (path.substr(path.length - 1,path.length) == '\\') { | |
| path=path.substr(0, path.length - 1); | |
| } | |
| return path; | |
| } | |
| function existsItem(path){ | |
| return FileSystemObj.FolderExists(path)||FileSystemObj.FileExists(path); | |
| } | |
| function deleteItem(path){ | |
| if (FileSystemObj.FileExists(path)){ | |
| FileSystemObj.DeleteFile(path); | |
| return true; | |
| } else if (FileSystemObj.FolderExists(path) ) { | |
| FileSystemObj.DeleteFolder(stripTrailingSlash(path)); | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| //------------------------------- | |
| //---------------------- | |
| //---------- | |
| //----- | |
| //-- | |
| function request( url){ | |
| if (proxy!=0 && bypass!=0 ) { | |
| WinHTTPObj.SetProxy(proxy_settings,proxy,bypass); | |
| } | |
| if (proxy!=0 ) { | |
| WinHTTPObj.SetProxy(proxy_settings,proxy); | |
| } | |
| if (user!=0 && pass!=0){ | |
| WinHTTPObj.SetCredentials(user,pass,HTTPREQUEST_SETCREDENTIALS_FOR_SERVER); | |
| } | |
| if (proxy_user!=0 && proxy_pass!=0 ) { | |
| WinHTTPObj.SetCredentials(proxy_user,proxy_pass,HTTPREQUEST_SETCREDENTIALS_FOR_PROXY ); | |
| } | |
| if(certificate!=0) { | |
| WinHTTPObj.SetClientCertificate(certificate); | |
| } | |
| //set autologin policy | |
| WinHTTPObj.SetAutoLogonPolicy(autologon_policy); | |
| //set timeouts | |
| WinHTTPObj.SetTimeouts(RESOLVE_TIMEOUT,CONNECT_TIMEOUT,SEND_TIMEOUT,RECEIVE_TIMEOUT); | |
| try { | |
| WinHTTPObj.Open(http_method,url,false); | |
| if (headers.length!==0){ | |
| WScript.Echo("Sending with headers:"); | |
| for (var i=0;i<headers.length;i++){ | |
| WinHTTPObj.SetRequestHeader(headers[i][0],headers[i][1]); | |
| WScript.Echo(headers[i][0]+":"+headers[i][1]); | |
| } | |
| WScript.Echo(""); | |
| } | |
| if (ua !== ""){ | |
| //user-agent option from: | |
| //WinHttpRequestOption enumeration | |
| // other options can be added like bellow | |
| //https://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx | |
| WinHTTPObj.Option(0)=ua; | |
| } | |
| if(escape){ | |
| WinHTTPObj.Option(3)=true; | |
| } | |
| if (trim(body) === ""){ | |
| WinHTTPObj.Send(); | |
| }else{ | |
| WinHTTPObj.Send(body); | |
| } | |
| var status=WinHTTPObj.Status | |
| } catch (err) { | |
| WScript.Echo(err.message); | |
| WScript.Quit(666); | |
| } | |
| //////////////////////// | |
| // report // | |
| //////////////////////// | |
| if(reportfile!="" ) { | |
| //var report_string=""; | |
| var n="\r\n"; | |
| var report_string="Status:"+n; | |
| report_string=report_string+" "+WinHTTPObj.Status; | |
| report_string=report_string+" "+WinHTTPObj.StatusText+n; | |
| report_string=report_string+" "+n; | |
| report_string=report_string+"Response:"+n; | |
| report_string=report_string+WinHTTPObj.ResponseText+n; | |
| report_string=report_string+" "+n; | |
| report_string=report_string+"Headers:"+n; | |
| report_string=report_string+WinHTTPObj.GetAllResponseHeaders()+n; | |
| WinHttpRequestOption_UserAgentString = 0; // Name of the user agent | |
| WinHttpRequestOption_URL = 1; // Current URL | |
| WinHttpRequestOption_URLCodePage = 2; // Code page | |
| WinHttpRequestOption_EscapePercentInURL = 3; // Convert percents | |
| // in the URL | |
| // rest of the options can be seen and eventually added using this as reference | |
| // https://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx | |
| report_string=report_string+"URL:"+n; | |
| report_string=report_string+WinHTTPObj.Option(WinHttpRequestOption_URL)+n; | |
| report_string=report_string+"URL Code Page:"+n; | |
| report_string=report_string+WinHTTPObj.Option(WinHttpRequestOption_URLCodePage)+n; | |
| report_string=report_string+"User Agent:"+n; | |
| report_string=report_string+WinHTTPObj.Option(WinHttpRequestOption_UserAgentString)+n; | |
| report_string=report_string+"Escapped URL:"+n; | |
| report_string=report_string+WinHTTPObj.Option(WinHttpRequestOption_EscapePercentInURL)+n; | |
| prepareateFile(force,reportfile); | |
| WScript.Echo("Writing report to "+reportfile); | |
| writeFile(reportfile,report_string); | |
| } | |
| switch(status){ | |
| case 200: | |
| WScript.Echo("Status: 200 OK"); | |
| break; | |
| default: | |
| WScript.Echo("Status: "+status); | |
| WScript.Echo("Status was not OK. More info -> https://en.wikipedia.org/wiki/List_of_HTTP_status_codes"); | |
| } | |
| //if as binary | |
| if (saveTo.toLowerCase() === "con") { | |
| WScript.Echo(WinHTTPObj.ResponseText); | |
| } | |
| if (saveTo !== "" && saveTo.toLowerCase() !== "con"){ | |
| prepareateFile(force,saveTo); | |
| try { | |
| if(use_stream){ | |
| writeBinFile(saveTo,WinHTTPObj.ResponseStream ); | |
| } else { | |
| writeBinFile(saveTo,WinHTTPObj.ResponseBody); | |
| } | |
| } catch (err) { | |
| WScript.Echo("Failed to save the file as binary.Attempt to save it as text"); | |
| AdoDBObj.Close(); | |
| prepareateFile(true,saveTo); | |
| writeFile(saveTo,WinHTTPObj.ResponseText); | |
| } | |
| } | |
| WScript.Quit(status); | |
| } | |
| //-- | |
| //----- | |
| //---------- | |
| //---------------------- | |
| //------------------------------- | |
| function prepareateFile(force,file){ | |
| if (force && existsItem(file)){ | |
| if(!deleteItem(file)){ | |
| WScript.Echo("Unable to delete "+ file); | |
| WScript.Quit(8); | |
| } | |
| }else if (existsItem(file)){ | |
| WScript.Echo("Item " + file + " already exist"); | |
| WScript.Quit(9); | |
| } | |
| } | |
| function writeBinFile(fileName,data ){ | |
| AdoDBObj.Type = 1; | |
| AdoDBObj.Open(); | |
| AdoDBObj.Position=0; | |
| AdoDBObj.Write(data); | |
| AdoDBObj.SaveToFile(fileName,2); | |
| AdoDBObj.Close(); | |
| } | |
| function writeFile(fileName,data ){ | |
| AdoDBObj.Type = 2; | |
| AdoDBObj.CharSet = "iso-8859-1"; | |
| AdoDBObj.Open(); | |
| AdoDBObj.Position=0; | |
| AdoDBObj.WriteText(data); | |
| AdoDBObj.SaveToFile(fileName,2); | |
| AdoDBObj.Close(); | |
| } | |
| function readFile(fileName){ | |
| //check existence | |
| try { | |
| if (!FileSystemObj.FileExists(fileName)){ | |
| WScript.Echo("file " + fileName + " does not exist!"); | |
| WScript.Quit(13); | |
| } | |
| if (FileSystemObj.GetFile(fileName).Size === 0){ | |
| return ""; | |
| } | |
| var fileR=FileSystemObj.OpenTextFile(fileName,1); | |
| var content=fileR.ReadAll(); | |
| fileR.Close(); | |
| return content; | |
| } catch(err){ | |
| WScript.Echo("Error while reading file: "+fileName); | |
| WScript.Echo(err.message); | |
| WScript.Echo("Will return empty string"); | |
| return ""; | |
| } | |
| } | |
| function readPropFile(fileName){ | |
| //check existence | |
| resultArray=[]; | |
| if (!FileSystemObj.FileExists(fileName)){ | |
| WScript.Echo("(headers)file " + fileName + " does not exist!"); | |
| WScript.Quit(15); | |
| } | |
| if (FileSystemObj.GetFile(fileName).Size === 0){ | |
| return resultArray; | |
| } | |
| var fileR=FileSystemObj.OpenTextFile(fileName,1); | |
| var line=""; | |
| var k=""; | |
| var v=""; | |
| var lineN=0; | |
| var index=0; | |
| try { | |
| WScript.Echo("parsing headers form "+fileName+" property file "); | |
| while(!fileR.AtEndOfStream){ | |
| line=fileR.ReadLine(); | |
| lineN++; | |
| index=line.indexOf(":"); | |
| if(line.indexOf("#") === 0 || trim(line)==="") { | |
| continue; | |
| } | |
| if(index=== -1 || index === line.length-1 || index === 0) { | |
| WScript.Echo("Invalid line "+ lineN); | |
| WScript.Quit(93); | |
| } | |
| k=trim(line.substring(0,index)); | |
| v=trim(line.substring(index+1,line.length)); | |
| resultArray.push([k,v]); | |
| } | |
| fileR.Close(); | |
| return resultArray; | |
| }catch (err){ | |
| WScript.Echo("Error while reading headers file: "+fileName); | |
| WScript.Echo(err.message); | |
| WScript.Echo("Will return empty array"); | |
| return resultArray; | |
| } | |
| } | |
| function trim(str){ | |
| return str.replace(/^\s+/,'').replace(/\s+$/,''); | |
| } | |
| function main(){ | |
| parseArgs(); | |
| request(url); | |
| } | |
| main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment