2013-05-01 3 views
0

Это то, что я пытаюсь сделать: загрузить xml VAST из URL-адреса и сохранить локально в XML-файле на PHP. Для этого я использую file_get_contents и file_put_contents. это скрипт я использую:PHP file_get_contents и VAST xml

<?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>"; 
?> 

URL-адрес в вопросе реальный URL, который будет поставлять XML VAST код. Моя проблема заключается в том, что при сохранении де файла он будет писать пустой 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> 

Не 100% от времени они ограничивают количество запросов, но чаще всего это делается, когда я пытаюсь сохранить файл с помощью PHP-скрипта.

Это способ сделать PHP-скрипт похожим на браузер ???? Я не знаю, является ли это правильным вопросом, но это единственное, что я могу вспомнить, почему я получаю пустой тег VAST при использовании php-скрипта и получаю полный тег при использовании браузера.

любые идеи ???

спасибо :)

Update: После выполнения некоторых дополнительных исследований, я нашел некоторую информацию о 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>"; 
?> 

Я также addded в IFRAME для сравнения, когда браузер получает нужный файл и когда функция PHP нет.

+0

Обратитесь к поставщику этой услуги за вариантами поддержки. – hakre

+0

Речь идет не о продавце, а о том, что делают file_get_contents по-другому, что firefox. – pcapelo

+0

Ну, это легко сказать: все и ничего. Все в том смысле, что эта функция полностью отличается от firefox. Ничего, потому что даже когда я открываю этот URL-адрес в браузере, я получаю то, что получает файл_get_contents. Вот почему лучше обратиться к поставщику этих веб-сервисов для поддержки первого уровня, чтобы понять, как нужно выполнять запросы, когда такие вещи меняются и т. Д. И т. Д. – hakre

ответ

3

После некоторых исследований я нашел решение для своей проблемы, и я хотел бы поделиться здесь для дальнейшего использования. Идея передать некоторый HTTP-заголовок с файлом_get_contents. Я достигаю этого:

$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, как если бы использовал браузер.

+0

Разве это не удивительно, когда у вас есть тот же вопрос, через 3 года, и вы найдете свой собственный ответ и все еще работает :) –

Смежные вопросы