N.B:在发布之前,我查看了Login with PHP curl and CSRF token和cURL CSRF Token,Login with CURL php and CSRF token,然后查看了一些内容。
我正在创建一个系统,它具有一个功能(如果可以)来分析来自另一个网站的数据。本网站需要使用用户,密码和登录进行登录。 csrf令牌。请参阅下面的代码。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) die(curl_error($ch));
$doc = new DOMDocument();
$doc->loadHTML($response);
$token = $doc->getElementsByTagName("csrf")->attributes->getNamedItem("value")->value[0];
echo "TOKEN: {$token} ";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_POST, true);
$params = array(
'username' => $username,
'password' => $password,
'csrf' => $token
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_exec($ch);
if (curl_errno($ch)) print curl_error($ch);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$html = curl_exec($ch);
print("<br />HTML: ".$html);
if (curl_errno($ch)) print curl_error($ch);
curl_close($ch);
我从上述问题略微修改了脚本,但收到了这些错误:
警告:DOMDocument :: loadHTML():htmlParseEntityRef:期待&#39;;&#39;在 实体,行:24英寸 /home/dlip/subdomains$/eportaltest.website.com/public_html/ticket_load.php 第18行
警告:DOMDocument :: loadHTML():意外的结束标记:实体中的表单, 行:76英寸 /home/dlip/subdomains$/eportaltest.website.com/public_html/ticket_load.php 第18行
警告:DOMDocument :: loadHTML():实体中的标签导航无效,行:124 在 /home/dlip/subdomains$/eportaltest.website.com/public_html/ticket_load.php 第18行
警告:DOMDocument :: loadHTML():实体中的标记部分无效,行: 140英寸 /home/dlip/subdomains$/eportaltest.website.com/public_html/ticket_load.php 第18行
警告:DOMDocument :: loadHTML():解析属性名称时出错 实体,行:176英寸 /home/dlip/subdomains$/eportaltest.website.com/public_html/ticket_load.php 第18行
按照上述问题的说明,我也尝试过使用
$doc->loadHTML(htmlentities($response))
无济于事。
有没有人有什么线索出错?我理解这可能与网站有关,但我该如何解决这个问题呢?
谢谢:)
答案 0 :(得分:0)
有点肮脏的答案,但它的作用对我来说没问题......
使用此答案:https://stackoverflow.com/a/21804537/7508539
像这样滚动它:
$token = trim(get_string_between($response,'<input type="hidden" name="csrf" value="','" />'));
现在可能不得不在他们的网站上爆炸我需要的位,但至少我知道如何解决它而不是毫无目标地盯着我无法解决的错误。
有没有'非黑客'方法来解决这个问题?