如何注销发回页面的网站,以验证我是否要使用php和curl注销

时间:2018-03-31 01:03:48

标签: php http curl https

我正在尝试使用curl注销网站。当点击退出按钮时,这个网站会发回一个页面,询问我们是否要注销两个按钮“ok”和“cancel”。我用curl来获取这些数据

$headers = array(
    "GET $geturl HTTP/1.1",
    "Host: " . "$ip",
    "User-Agent:Mozilla/5.0(X11;Linuxx86_64;rv:45.0)Gecko/20100101Firefox/45.0",        
    "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*,q=0.8",
    "Referer: " . $referer,
    "Cookie: JSESSIONID=" . $session_id,
    "Connection: keep-alive",
    "Content-Length: 64",
    '"etag": W/"102-1257495352000"',
);


curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout after 15 seconds  

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLINFO_REDIRECT_URL, true);
curl_setopt($ch, CURLOPT_POSTREDIR, 3);
curl_setopt($ch, CURLOPT_COOKIESESSION, $session_id);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, "logout=logout");
$result1 = curl_exec($ch1);

输出包含两种形式:

            <form name="myLogout" action="logout.jsp" target="main" method="post">
                <input name="logout" type="hidden" value="logout">
                <input class="yesno" class="button" type="Submit" value=" OK ">
            </form>
        </td>
        <td width="20"></td>
        <td>
            <form action="start.jsp" target="main">
                <input class="yesno" type="Submit" value=" Cancel ">
            </form>

然后会话等待大约15秒钟,以便将事件后的响应转到“确定”按钮。 因此,我发送另一个使用与上面相同的curl选项的发布请求,除了我将CURLOPT_CUSTOMREQUEST从“GET”更改为“POST”,但我得到null或“Bad Request”。 有人可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分:2)

我将尽我所能解释这一点。

提交该表单或任何表单所需要做的就是模仿它正在做的事情。

好的,表格有什么作用? 简单地说,他们使用GET或POST两种方法之一向服务器发送请求。 GET与在浏览器中使用URL相同(这就是为什么当您提交它时,查询参数会在URL中发生变化并获得新页面。)

因此,从理论上讲,您只需POST logout.jsplogout=logout表单操作的请求,其中包含<form name="myLogout" action="logout.jsp" target="main" method="post"> <input name="logout" type="hidden" value="logout"> <input class="yesno" class="button" type="Submit" value=" OK "> </form> 形式的数据。

根据您是否构建该表单来考虑

action="logout.jsp"

如果我构建了这个表单,我会在$_POST构建一个页面,我会使用<?php if(isset($_POST['logout'])){ session_destroy(); header('Location: www.example.com'); exti(); }else{ //some error message or redirect to 404, this should never happen. //maybe send message to the Internet police with your IP, just kidding } 数组等(假设它是PHP)

 curl_setopt($ch, CURLOPT_COOKIESESSION, $session_id);
 curl_setopt($ch, CURLOPT_URL, '{www.example.com}/logout.jsp');
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, 'logout=logout');

所以我只想查找post数组中的注销,然后销毁会话,然后重定向到我的主页。

所以在卷曲中你只需要

f12

然后是其他标准的CURL内容。

要考虑的一些事项: 现在这可能有效,也可能不行,有很多变量,我只是不知道能够说100%。他们可以使用cookie和JavaScript做一些事情,这超出了你只能用CURL做的事情(例如PhantomJS或无头浏览器处理程序)。但是,这个HTML非常简单(例如,没有随机生成的ID),所以我认为它不是那么先进。

要做的一件事是在浏览器中,登录后转到该页面。按.Net打开浏览器调试窗口。找到网络面板,找到记录按钮(或保留)。注销,然后检查对该表单的服务器发出的请求。这就是你需要复制的东西。

总而言之,我多年来做了很多废话。现在我们有一个 //Where email input is being grabbed $sanemail=mysqli_real_escape_string($con, $_POST['email']); //User_id is being grabbed $sql8="SELECT user_id FROM users WHERE email='".$sanemail."'"; $result=mysqli_query($con,$sql8); $rows=mysqli_fetch_assoc($result); $user_id=(int)$rows; var_dump($rows); var_dump($user_id); 人来处理它。它更适合我们所需的PHP。