Не вызывайте htmlentities()
на выходе, это просто необходимо, если вы собираетесь отображать его в браузере. Вы не хотите делать это, если собираетесь обрабатывать как необработанный XML. В этом случае ваш первый пример будет работать просто отлично.
$xml = file_get_contents($cas_url);
$dom = new DomDocument();
$dom->loadXML($xml);
$xpath = new DomXPath($dom);
$node = $xpath->query("//cas:user");
if ($node->length) {
echo $node[0]->textContent;
}
Прием должен создать менеджер паролей и затем сказать urllib об этом. Обычно, Вы не будете заботиться об области аутентификации, просто часть хоста/URL. Например, следующее:
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "http://example.com/"
password_mgr.add_password(None, top_level_url, 'user', 'password')
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(urllib2.HTTPHandler, handler)
request = urllib2.Request(url)
Установит имя пользователя и пароль на каждый URL, запускающийся с top_level_url
. Другие опции состоят в том, чтобы указать имя хоста или больше полного URL здесь.
Хороший документ, описывающий это и больше по http://www.voidspace.org.uk/python/articles/urllib2.shtml#id6.
Да, взгляните на urllib2. HTTP*AuthHandlers.
Пример из документации:
import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
uri='https://mahler:8092/site-updates.py',
user='klem',
passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com/login.html')