PHP file_get_contents和VAST xml

时间:2013-05-01 15:19:05

标签: php xml vast

这就是我要做的事情:从URL下载xml VAST并在PHP中本地保存在XML文件中。为此,我使用file_get_contents和file_put_contents。这是我正在使用的脚本:

<?php
$tid=time();

$xml1 = file_get_contents('http://ad.afy11.net/ad?enc=4&asId=1000009566807&sf=0&ct=256');
file_put_contents("downloads/file1_$tid.xml", $xml1);
echo "<p>file 1 recorded</p>";
?>

相关网址是一个真实的网址,可以提供xml VAST代码。我的问题是,当我保存de文件时,它会写一个空的VAST标签:

<?xml version="1.0" encoding="UTF-8"?> <VAST version="2.0"> </VAST>

但如果我在Firefox上运行,它实际上会提供一些代码:

<VAST version="2.0"><Ad id="Adify"><Wrapper><AdSystem>Eyeblaster</AdSystem><VASTAdTagURI>http://bs.serving-sys.com/BurstingPipe/adServer.bs?cn=is&c=23&pl=VAST&pli=6583370&PluID=0&pos=7070&ord=4288438534]&cim=1</VASTAdTagURI><Impression>http://ad.afy11.net/ad?ipc=NMUsqYdyBUCjh4-i2HwWfK1oILM2AAAAN6-rBkSy8JNMZcuzAlj1XlSySpo6Hi7xEYULS+UgOVN5D3UuhFUVSWbFHoLE-+3su0-QnGgZgMJyiTm-R6O+yQ==</Impression><Creatives/></Wrapper></Ad></VAST>

不是百分之百的时候,他们确实限制了请求的数量,但是当我尝试使用PHP脚本保存文件时更常见。

这是一种让PHP脚本模仿浏览器的方法吗?我不知道这是否是正确的问题,但这是我唯一可以想到的为什么我在使用php脚本时得到一个空的VAST标签并在使用浏览器时得到一个完整的标签。

任何想法???

谢谢:)

更新:在做了一些额外的研究之后,我找到了一些关于stream_context_create函数的信息,但是我无法复制浏览器的结果。

这是我的新代码:

<?php

$tid=time();

$opts = array('http' =>
    array(
        'method'  => 'GET',
        //'user_agent '  => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100301 Ubuntu/9.10 (karmic) Firefox/3.6",
        'header' => array(
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8
'
        ), 
    )
);
$context  = stream_context_create($opts);


$xml1 = file_get_contents('http://ad.afy11.net/ad?enc=4&asId=1000009566807&sf=0&ct=256');
file_put_contents("downloads/file1_$tid.xml", $xml1);
echo "<p>file 1 recorded</p>";
echo "<textarea rows='6' cols='80'> $xml1 </textarea> ";
echo "<br><iframe src='http://ad.afy11.net/ad?enc=4&asId=1000009566807&sf=0&ct=256' width='960' height='300'></iframe>";
?>

我还添加了一个iframe,以便在浏览器获取正确的文件和php函数没有时进行比较。

1 个答案:

答案 0 :(得分:4)

经过一番研究后,我找到了解决问题的方法,我想在此分享以供将来参考。 关于使用file_get_contents传递一些HTTP头的想法。我用这个来实现这个目标:

$opts = array(
            'http'=>array(
                        'method'=>"GET",
                        'header'=>array("Accept-language: en", "Content-Type: multipart/form-data\r\n"),
                        'user_agent'=>    $_SERVER['HTTP_USER_AGENT']
                        )
            );

$context = stream_context_create($opts); 

$xml4 = file_get_contents($url1, true, $context);

就是这样,现在我可以获得与使用浏览器时相同的xml。