您如何批量测试 URL 重定向?
How do you Bulk Test URL Redirections?
像 SO 上的许多其他人一样,我不是来自铁杆开发背景 - 更多的操作。因此,我发现自己正在为这样的事情而苦苦挣扎,我想这很属于这里。
要求 - 我想轻松测试大批量 (1000-50000) URL 重定向。更接近于前者。
我想提供的意见
- 源 URL & 目标 URL
输出我想要...嗯滚出去
- Pass/Fail
- HTTP 响应代码
的奖励积分 - 使用真正的浏览器(Selenium 等),因为只有很小一部分重定向是在 JS 中完成的。很小。能够选择 Target URL 等于第一个重定向还是倒数第二个。能够轻松更改 HTTP Headers(尽管很高兴将 Fiddler 等注入其中)
我目前的想法
Bash 脚本调用 curl。我可以做到这一点,但我的问题是能够扩展它,即解析 csv 输入而不是手动编辑脚本。它也没有涵盖 JS 重定向(没有交易破坏者)。似乎是最简单的选择。
Selenium IDE 脚本。我可能可以编写脚本,但再次努力将其扩展到 10 URLs。可能必须解析 CSV 以创建每个脚本,然后将它们输入命令行运行程序,然后捕获输出。
尖叫的青蛙。我真的很喜欢这个工具,它可以批量测试重定向。但是它没有pass/fail的概念。非常接近 one-stop 商店。此外,免费版本不遵循重定向链(即 curl 中的 -L)
这似乎是其他人必须遇到并以我想到的 mainstream/easier 方式解决的问题之一。在此先感谢任何可以提供帮助的人。
一个解决方案:
csv:
http://google.com;http://www.google.fr
http://domain.null;http://www.domain.null
代码:
#!/bin/bash
while IFS=";" read -r url1 url2; do
ret=$(curl -s -o /dev/null -w "%{http_code}\n" "$url1")
((ret >= 200 && ret <= 400)) && echo 'url1 PASS' || echo 'url1 FAIL'
echo "url2 $(curl -s -L -o /dev/null -w "%{http_code}\n" "$url2")"
done < csv
如果您需要知道重定向(或未重定向)的真实 URL,请使用
curl -L -s -o /dev/null http://google.fr -w "%{url_effective}\n"
随时改进以满足您的需求。
非常感谢 StardustOne,但我觉得我必须重新发明轮子。
忽略了在浏览器中测试和涵盖 JS 场景的要求,我又看了一遍,迄今为止我发现的最好的解决方案是 Devops 周刊通讯中发送的内容
阴燃 - https://github.com/sky-shiny/smolder
我知道为我们的一个供应商工作的一名员工也在开发一个类似的应用程序,该应用程序包装了 Python 请求库,我计划很快将两者背靠背找出哪个实际上是最好的。如果他的努力击败了 Smolder,我会 post 回来!
像 SO 上的许多其他人一样,我不是来自铁杆开发背景 - 更多的操作。因此,我发现自己正在为这样的事情而苦苦挣扎,我想这很属于这里。
要求 - 我想轻松测试大批量 (1000-50000) URL 重定向。更接近于前者。
我想提供的意见
- 源 URL & 目标 URL
输出我想要...嗯滚出去
- Pass/Fail
- HTTP 响应代码
的奖励积分 - 使用真正的浏览器(Selenium 等),因为只有很小一部分重定向是在 JS 中完成的。很小。能够选择 Target URL 等于第一个重定向还是倒数第二个。能够轻松更改 HTTP Headers(尽管很高兴将 Fiddler 等注入其中)
我目前的想法
Bash 脚本调用 curl。我可以做到这一点,但我的问题是能够扩展它,即解析 csv 输入而不是手动编辑脚本。它也没有涵盖 JS 重定向(没有交易破坏者)。似乎是最简单的选择。
Selenium IDE 脚本。我可能可以编写脚本,但再次努力将其扩展到 10 URLs。可能必须解析 CSV 以创建每个脚本,然后将它们输入命令行运行程序,然后捕获输出。
尖叫的青蛙。我真的很喜欢这个工具,它可以批量测试重定向。但是它没有pass/fail的概念。非常接近 one-stop 商店。此外,免费版本不遵循重定向链(即 curl 中的 -L)
这似乎是其他人必须遇到并以我想到的 mainstream/easier 方式解决的问题之一。在此先感谢任何可以提供帮助的人。
一个解决方案:
csv:
http://google.com;http://www.google.fr
http://domain.null;http://www.domain.null
代码:
#!/bin/bash
while IFS=";" read -r url1 url2; do
ret=$(curl -s -o /dev/null -w "%{http_code}\n" "$url1")
((ret >= 200 && ret <= 400)) && echo 'url1 PASS' || echo 'url1 FAIL'
echo "url2 $(curl -s -L -o /dev/null -w "%{http_code}\n" "$url2")"
done < csv
如果您需要知道重定向(或未重定向)的真实 URL,请使用
curl -L -s -o /dev/null http://google.fr -w "%{url_effective}\n"
随时改进以满足您的需求。
非常感谢 StardustOne,但我觉得我必须重新发明轮子。
忽略了在浏览器中测试和涵盖 JS 场景的要求,我又看了一遍,迄今为止我发现的最好的解决方案是 Devops 周刊通讯中发送的内容
阴燃 - https://github.com/sky-shiny/smolder
我知道为我们的一个供应商工作的一名员工也在开发一个类似的应用程序,该应用程序包装了 Python 请求库,我计划很快将两者背靠背找出哪个实际上是最好的。如果他的努力击败了 Smolder,我会 post 回来!