Получить значение поля ввода из других сайтов HTML-код

php

111 просмотра

3 ответа

Я пытаюсь получить значение скрытого поля ввода на странице твиттеров. Я использую file_get_contents в URL, а затем пытаюсь получить значение ввода с помощью функции preg_match_all, но что-то в моем коде не работает, потому что я просто возвращаю пустой массив. Я был бы очень признателен, если бы кто-нибудь просмотрел мой код и помог мне заставить его работать.

HTML-код поля ввода, из которого я хочу получить значение (в этом примере twitter )

<input type="hidden" name="screen_name" value="twitter">

Мой фрагмент кода, я не могу работать

$html = file_get_contents($url);
preg_match_all("/<input type=\"hidden\" name=\"screen_name\" value=\"(.*?)\">/", $html, $screen_name);
echo "<pre>", print_r($screen_name, true), "</pre>";

Этот код должен выводить значение поля ввода в этом примере просто в твиттере в массиве.

Редактировать: мой фрагмент кода работает, я просто не заметил, что Twitter показывает это скрытое поле ввода, только если вы вошли в твиттер и, конечно, если вы используете file_get_contents, ваш веб-сервер не будет авторизован в твиттере и не сможет получить HTML Кодируйте то, что вы получаете, если вы вошли в систему. Спасибо vigikaran за указание на это мне и Гилберту за улучшение регулярного выражения в моем фрагменте кода.

Автор: Truzze Источник Размещён: 08.11.2019 11:10

Ответы (3)


2 плюса

Это работает для меня:

    $html = '<input type="hidden" name="screen_name" value="twitter">';
    preg_match_all('/<input type=\"hidden\" name=\"screen_name\" value=\"(.*?)\">/', $html, $screen_name);
    echo "<pre>", print_r($screen_name, true), "</pre>";

Вы можете проверить это здесь https://eval.in/626194

Строка в $screen_name[1][0]

Автор: Webinan Размещён: 20.08.2016 10:37

2 плюса

Не обращая внимания на страницу Twitter, я замечаю, что ваше регулярное выражение подвержено лишним пробелам в тегах html. Это может быть реальной проблемой для очистки экрана. Пытаться:

'/<input\s+type="hidden"\s+name="screen_name"\s+value="(.*?)">/',

или если вы хотите иметь лучшую способность противостоять небольшим изменениям со стороны Твиттера, то будет работать следующее, если имя = предшествует значению =:

 '/<input\s+[^<>]*\s+name\s*=\s*"screen_name"[^<>]*\s+value\s*=\s*"(.*?)">/',

(отредактировано выше для улучшения устойчивости к изменениям пробелов)

Автор: Gilbert Размещён: 20.08.2016 10:45

1 плюс

Решение

Спасибо vigikaran за указание на это, мой код в порядке и работает, но HTML-код, который я получил из твиттера, не содержит скрытого поля ввода, которое я искал, потому что оно показывает только поле ввода, если вы вошли в систему и, конечно, если вы используете file_get_contents, ваш веб-сервер не будет авторизован. Спасибо всем за помощь и Гилберту за улучшение регулярного выражения из моего фрагмента кода.

Автор: Truzze Размещён: 20.08.2016 10:56
Вопросы из категории :
32x32