2017-12-01 17 views
0

私はこのウェブサイトを持っているに接続するために問題が第三者のウェブサイト

[1] [参照してくださいするにはここをクリック]:http://www.forumjeep.ca/connect.phpを、あなたが見ることができるように、その唯一のコードは、私たちが見ています。私は第三者のウェブサイトを見ようとしているが、それは機能していない。私は資格情報でログインすることができますが、そこから立ち往生しています。ここではHanshenrikに感謝しています。どんな助けも可能ですか?

<?php 
declare(strict_types = 1); 
const USERNAME = '???'; 
const PASSWORD = '???'; 
header ("content-type: text/plain;charset=utf8"); 
require_once ('hhb_.inc.php'); 
$hc = new hhb_curl ('', true); 
$html = $hc->exec ('https://app.cfe.gob.mx/Aplicaciones/CCFE/Recibos/Consulta/login.aspx')->getStdOut(); 
$domd = @DOMDocument::loadHTML ($html); 
$inputsRaw = getDOMDocumentFormInputs ($domd, true) ['aspnetForm']; 
$inputs = array(); 
foreach ($inputsRaw as $tmp) { 
    $inputs [$tmp->getAttribute ("name")] = $tmp->getAttribute ("value"); 
} 
assert (isset ($inputs ['__VIEWSTATE'], $inputs ['__EVENTVALIDATION'])); 
$inputs ['ctl00$PHContenidoPag$UCLogin2$LoginUsuario$UserName'] = USERNAME; 
$inputs ['ctl00$PHContenidoPag$UCLogin2$LoginUsuario$Password'] = PASSWORD; 
hhb_var_dump ($inputs); 
$html = $hc->setopt_array (array (
     CURLOPT_URL => 'https://app.cfe.gob.mx/Aplicaciones/CCFE/Recibos/Consulta/login.aspx', 
     CURLOPT_POST => true, 
     CURLOPT_POSTFIELDS => http_build_query ($inputs) 
))->exec()->getStdOut(); 
// hhb_var_dump($html) & die(); 
$domd = @DOMDocument::loadHTML ($html); 
$xp = new DOMXPath ($domd); 
$loginErrors = $xp->query ('//*[(contains(@style,"color:Red") or contains(@color,"Red")) and not(contains(@style,"hidden"))]'); 
foreach ($loginErrors as $tmp) { 
    echo "login error!! "; 
    var_dump ($tmp->textContent); 
} 
if (0 === $loginErrors->length) { 
    echo "login success!"; 
} 

function getDOMDocumentFormInputs(\DOMDocument $domd, bool $getOnlyFirstMatches = false): array { 
    // :DOMNodeList? 
    $forms = $domd->getElementsByTagName ('form'); 
    $parsedForms = array(); 
    $isDescendantOf = function (\DOMNode $decendant, \DOMNode $ele): bool { 
     $parent = $decendant; 
     while (NULL !== ($parent = $parent->parentNode)) { 
      if ($parent === $ele) { 
       return true; 
      } 
     } 
     return false; 
    }; 
    // i can't use array_merge on DOMNodeLists :(
    $merged = function() use (&$domd): array { 
     $ret = array(); 
     foreach ($domd->getElementsByTagName ("input") as $input) { 
      $ret [] = $input; 
     } 
     foreach ($domd->getElementsByTagName ("textarea") as $textarea) { 
      $ret [] = $textarea; 
     } 
     foreach ($domd->getElementsByTagName ("button") as $button) { 
      $ret [] = $button; 
     } 
     return $ret; 
    }; 
    $merged = $merged(); 
    foreach ($forms as $form) { 
     $inputs = function() use (&$domd, &$form, &$isDescendantOf, &$merged): array { 
      $ret = array(); 
      foreach ($merged as $input) { 
       // hhb_var_dump ($input->getAttribute ("name"), $input->getAttribute ("id")); 
       if ($input->hasAttribute ("disabled")) { 
        // ignore disabled elements? 
        continue; 
       } 
       $name = $input->getAttribute ("name"); 
       if ($name === '') { 
        // echo "inputs with no name are ignored when submitted by mainstream browsers (presumably because of specs)... follow suite?", PHP_EOL; 
        continue; 
       } 
       if (! $isDescendantOf ($input, $form) && $form->getAttribute ("id") !== '' && $input->getAttribute ("form") !== $form->getAttribute ("id")) { 
        // echo "this input does not belong to this form.", PHP_EOL; 
        continue; 
       } 
       if (! array_key_exists ($name, $ret)) { 
        $ret [$name] = array (
          $input 
        ); 
       } else { 
        $ret [$name] [] = $input; 
       } 
      } 
      return $ret; 
     }; 
     $inputs = $inputs(); // sorry about that, Eclipse gets unstable on IIFE syntax. 
     $hasName = true; 
     $name = $form->getAttribute ("id"); 
     if ($name === '') { 
      $name = $form->getAttribute ("name"); 
      if ($name === '') { 
       $hasName = false; 
      } 
     } 
     if (! $hasName) { 
      $parsedForms [] = array (
        $inputs 
      ); 
     } else { 
      if (! array_key_exists ($name, $parsedForms)) { 
       $parsedForms [$name] = array (
         $inputs 
       ); 
      } else { 
       $parsedForms [$name] [] = $tmp; 
      } 
     } 
    } 
    unset ($form, $tmp, $hasName, $name, $i, $input); 
    if ($getOnlyFirstMatches) { 
     foreach ($parsedForms as $key => $val) { 
      $parsedForms [$key] = $val [0]; 
     } 
     unset ($key, $val); 
     foreach ($parsedForms as $key1 => $val1) { 
      foreach ($val1 as $key2 => $val2) { 
       $parsedForms [$key1] [$key2] = $val2 [0]; 
      } 
     } 
    } 
    return $parsedForms; 
} 

答えて

0

問題は、あなたがあなたがする必要がどのような/無地

header ("content-type: text/plain;charset=utf8"); 

をテキストにコンテンツタイプヘッダを設定している私はtext/htmlの

header ("content-type: text/html; charset=utf8"); 

にそれを考えに設定されていることですしかし、後でHTMLをダンプする場合は、成功したログインをユーザに通知する方法を再評価することをお勧めします。このように、

login success!<!DOCTYPE html PUB... 

はまったく良くありません。

タグ内でレンダリングしたいものすべてを試しておき、それらのタグをタグ内に保持します。

幸運を祈る!