gpt4 book ai didi

javascript - 脚本没有正确接收 url

转载 作者:可可西里 更新时间:2023-11-01 13:53:15 26 4
gpt4 key购买 nike

我正在使用组合的批处理和 java 脚本,我发现它使用批处理文件从网站检索 html,而我们解决的问题没有返回所需的输出,因为它在我使用 firefox 中的 url 时出现。

我用来提取 html 的脚本是:

@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);

我尝试提供给脚本的 url 是 http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=[ 《一千零一夜》]

或者选择http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=[ 《一千零一夜》]

问题似乎是空格/+,因为我提供给它的其他网址都没有使用空格或 +

我调用脚本来拉取 html 的方式是:

call callurl.cmd "http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=["Arabian+Nights"]"

编辑:找到原始线程脚本来自Open a URL without using a browser from a batch file

我所做的唯一更改是将 Msxml2.XMLHTTP.6.0 更改为 MSXML2.ServerXMLHTTP.6.0,因为我发现由于安全原因,原始脚本无法加载站点。

最佳答案

在这种情况下,问题是 Windows 脚本宿主使用了参数中包含的双引号。

npocmaka 已显示 one of the solutions : 对 url 中的引号进行编码。从我的 Angular 来看,这是正确的(双引号是不安全的字符,应该进行编码)。

另一种解决方案是不将 URL 作为参数传递给脚本,而是将其存储在环境变量中,然后在 javascript 部分从变量中检索值

@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 );

现在,它可以被称为

geturl.cmd "http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=["Arabian+Nights"]"

关于javascript - 脚本没有正确接收 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39588192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com