Я пытаюсь получить ссылку токена, но не могу. Источник:
<span class="ipsHide" data-role="downloadCounterContainer">Download begins in <span data-role="downloadCounter"></span> seconds</span>
<a href='https://example.com/forum/files/file/2-content/?do=download&r=24050&confirm=1&t=1&csrfKey=72c4d0ffcabb34c6d6c490cbacbc354ag1536355261' class='ipsButton ipsButton_primary ipsButton_small' data-action="download" >Download</a>
Explode:
$url = "link";
$content = file_get_contents($url);
$first = explode( "<span data-role=\"downloadCounter\"></span> seconds</span>" , $content );
$last = explode("' class='ipsButton ipsButton_primary ipsButton_small'" , $first[1] );
echo $last[0];
В чем проблема?
Вы используете разнесение с разделителем, поэтому значение $last[0]
даст вам строку:
<a href='https://example.com/forum/files/file/2-content/?do=download&r=24050&confirm=1&t=1&csrfKey=72c4d0ffcabb34c6d6c490cbacbc354ag1536355261
Что вы могли бы сделать, это использовать DOMDocument а также DOMXPath и укажите имена классов для получения тегов a, а из них — атрибут href. Тогда используйте parse_url а также parse_str чтобы получить параметр строки запроса. Так, например, если вы хотите получить csrfKey
:
$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DomXPath($doc);
$results = $xpath->query("//a[contains(@class, 'ipsButton') and contains(@class, 'ipsButton_primary') and contains(@class, 'ipsButton_small')]");
foreach ($results as $result) {
$url = parse_url($result->getAttribute("href"), PHP_URL_QUERY);
parse_str($url, $params);
echo $params['csrfKey'];
}
Других решений пока нет …