这就是我要做的事情:从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函数没有时进行比较。
答案 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。