我正在尝试使用 wget 下载一个网站,但在克隆第一个网页后它不会保持会话处于活动状态,该网站具有登录名并使用 HTTPS,因此如果不是通过凭据,我将无法通过它进行导航。我设法使用 cURL 登录到服务器并将它的 PHPSESSIONID 保存到 cookie.txt 所以这个过程我正在做:
首先,我创建一个cookie.txt
wget --save-cookies=cookie.txt
--keep-session-cookies "https://huellas.dashboardtimes.com/login.php?user=MyUserName&password=MyPass"
--delete-after
Run Code Online (Sandbox Code Playgroud)
没有--post-data给出,因为该网站使用 GET 方法进行身份验证(这已成功登录,但仅适用于第一页)。
进而:
wget --load-cookies=cookie.txt -m https://Website.wget.com/home
Run Code Online (Sandbox Code Playgroud)
此时,wget 克隆https://Website.wget.com/home在成功登录后返回代码 200 OK,但是当它完成 /home 并进入另一个模块时,例如https://Website.wget .com/contacts它失去了它的会话并将所有其他模块克隆为错误 - 404,返回代码为 302。我还尝试为命令提供一个包含几个 URL 的列表
wget --load-cookies=cookie.txt -m -i list.txt
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的结果。-m选项中是否有可能导致此问题的内容?因为如果我不指定-m选项,它会下载列表中 URLS 的 HTML 文件,没有错误 404,但我需要的不仅仅是 HTML,所以我为什么要使用-m选项。
是否有解决方法或我遗漏了什么?
(如果有任何其他工具,例如 wget 可以用于此目的,我也想知道)。
感谢您的回答。
我使用 useEffect 钩子在包含 API 调用的异步函数返回一个对象数组之后实现一些逻辑,该对象数组是钩子的依赖项。
问题是钩子本身并没有等待数组更改来执行其中的逻辑,它只是执行即使availableSitesis still []:
const [availableSites, setAvailableSites] = useState([]);
useEffect(initialize, [getAxiosInstance])
async function initialize() {
// ...
const initPage = async () => {
try {
const response = await getAxiosInstance().get(GetObjects); // Api EndPoint
if (response.data) {
setAvailableSites(response.data); // data for availableSites
const Secondresponse = await somePromise(); // Another API call thas lasts around 10 seconds
if (response && response.status === 200) {
// ...
}
}
} catch {
// ... …Run Code Online (Sandbox Code Playgroud)