提问人:executable 提问时间:11/17/2023 最后编辑:Compoexecutable 更新时间:11/17/2023 访问量:66
CURL 错误:执行 API POST 时出现“URL 被拒绝:主机名错误”
CURL Error: "URL rejected: Bad hostname" When executing API POST
问:
我有一个批处理脚本,旨在在远程服务器(即网站)上启动 Windows 服务。然后,该脚本每 10 秒检查一次网站是否使用 CURL 启动。网站启动后,它继续使用 CURL 执行 API POST 命令。
但是,我遇到了一个问题,即脚本在执行过程中输出错误,特别是“URL rejected: Bad hostname”。 脚本如下:
@ECHO OFF
setlocal enabledelayedexpansion
echo Starting website
ssh [email protected] "cmd.exe /c sc start ""Website-Service"">nul"
for /l %%i in (1,1,10) do (
curl --head --fail --silent "http://10.172.0.1:3000/browse" > nul 2>&1 && (
echo Configuring website
curl -X POST -H "Content-Type: application/json" -d "{\"username\": \"[email protected]\", \"password\": \"aaA_aAaaaaAA?\"}" http://10.172.0.1:3000/api/session 2^>^&1 | C:\wamp64\www\utils\syncLCH\jq-windows-amd64.exe -r ".id" > C:\wamp64\www\_tmp\token.txt
set /p token=<C:\wamp64\www\_tmp\token.txt
del C:\wamp64\www\_tmp\token.txt
echo %token%
REM run api using the token
exit /b
) || (
echo Website is down. Attempt %%i of 10.
timeout /nobreak /t 10 > nul
)
)
echo Maximum attempts reached. Exiting script.
该脚本成功启动服务并检查网站状态,但在 API POST 命令期间遇到“URL 被拒绝:URL 函数的格式错误输入”错误。奇怪的是,在命令行界面中运行相同的命令会从 API 产生预期的结果。
是什么原因导致了脚本中的此错误,如何解决它以成功检索身份验证令牌?
输出如下:
Starting website
Website is down. Attempt 1 of 10.
Website is down. Attempt 2 of 10.
Configuring website
curl: (3) URL rejected: Malformed input to a URL function
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 131 100 59 100 72 691 843 --:--:-- --:--:-- --:--:-- 1541
curl: (3) URL rejected: Bad hostname
ECHO command disabled.
答: 暂无答案
评论
echo %token%
echo !token!
"{\"username\": \"[email protected]\", \"password\": \"aaA_aAaaaaAA?\"}"
是 Linux/Mac shell 解释器语法,而不是 Windows 命令处理器的有效语法。将 JSON 格式的数据传递给引用的最佳方法,始终使用其完全限定的文件名,而不仅仅是将数据写入文件,并使用 Curl 从文件而不是命令提示符窗口读取数据的选项。用户名和密码是保存在批处理文件还是单独的文本文件中并不重要。curl
%SystemRoot%\System32\curl.exe
curl
Credentials.json
{"username": "[email protected]", "password": "aaA_aAaaaaAA?"}
%SystemRoot%\System32\curl.exe --json "@%~dp0Credentials.txt" http://10.172.0.1:3000/api/session 2>&1
curl -X POST -H "Content-Type: application/json" -d "{\"username\": \"[email protected]\", \"password\": \"aaA_aAaaaaAA?\"}" http://10.172.0.1:3000/api/session 2^>^&1
curl --head --fail --silent "http://10.172.0.1:3000/browse" > nul 2>&1
还应该进行优化,以加快执行速度。Curl 有很多命令行选项,非常值得阅读 Curl 手册或完整的 Curl 文档以获取命令行选项。%SystemRoot%\System32\curl.exe --head --fail --silent -o nul -stderr - http://10.172.0.1:3000/browse