我没有使用自定义的 download_file_content() 函数,而是使用了 file_get_contents() 并将 xml 字符串传递给 SimpleXMLElement。希望这会为您指明正确的方向。
考虑将功能拆分为两种方法:a) buildURL() b) fetchXMLContent()。
$xmlContent = file_get_contents('https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=1030123459');
$xmlObj = new SimpleXMLElement($xmlContent);
foreach($xmlObj->unidade_curricular->inscritos->aluno as $aluno){
$result= $aluno->identificador;
echo $result;
}
回答您的评论:这涉及另一个问题!
您的域是 HTTPS 域,因此您需要告诉 cURL 如何处理它。
我创建了一个示例,它解决了所有提到的问题并演示了
cURL 用法。
<?php
function buildURL($year, $period, $typeperiod, $course)
{
return 'https://clip.unl.pt/sprs?lg=pt&year='.$year.'&uo=97747&srv=rsu&p='.$period.'&tp='.$typeperiod.'&md=3&rs='.$course.'&it=1030123459';
}
function doRequest_with_FileGetContents($url)
{
return file_get_contents($url);
}
function doRequest_with_cURL($url) {
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
// your domain is a HTTPS domain, so you need to tell curl how to deal with SSL verifications
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data=curl_exec($ch);
curl_close($ch);
return $data;
}
function processXML($xmlContent)
{
$xmlObj = new SimpleXMLElement($xmlContent);
foreach($xmlObj->unidade_curricular->inscritos->aluno as $aluno){
$result= $aluno->identificador;
echo $result;
}
}
// Ok. Lets test..
// some testing values, i guess these will come from a formular
$year = '2013';
$period = '1';
$typeperiod = 's';
$course = '8145';
// a) build URL
$url = buildURL($year, $period, $typeperiod, $course);
// b) fetch content
$content_a = doRequest_with_cURL($url);
$content_b = doRequest_with_FileGetContents($url);
// c) process content (should be the same)
echo "\nRequest with cURL\n";
processXML($content_a);
echo "\nRequest with file_get_contents()\n";
processXML($content_b);