Я запрашиваю веб-сайт, такой как (Rapidshare), который в ответ дает мне либо запрошенный файл, либо какой-то HTML-код, говорящий, что мне нужно подождать XX секунд, прежде чем я скачаю файл.Я запутался, как кодировать этот сценарий.
Теперь, если я делаю публикацию с использованием формы HTML, задаю в ней несколько полей и затем автоматически отправляю ее с помощью Javascript на целевой сайт.Если это успешно, пользователю предлагается, если он хочет загрузить это поле, и если это происходит по какой-то причине, например, если пользователю нужно подождать, он переводит пользователя на ЭТОТ сайт URL.
, чтобы избежать перенаправления пользователя на страницу ошибки целевого сайта.Я использую CURL, который отправляет запрос POST и читает ответ.Теперь проблема в том, что если ответом на запрос CURL является файл, страница остается загруженной до тех пор, пока весь файл, полученный в ответе, не будет загружен на сервер и сохранен в этой переменной.
эта функция, выполняющая запрос curl на $ urlс $ headerz в качестве значений заголовка и $ encoded являются параметрами запроса
function makeCurlPostRequest($url, $headerz, $encoded){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($headerz!=null)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerz);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
if($encoded!=null)
curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_AUTOREFERER, 0);
curl_setopt($ch, CURLOPT_REFERER, $url);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function checkUrl($file,$url,$headerz){
$post_data = array ( "premium_acc" => "checked",
"linkx" => "$file"
);
$encoded = '';
foreach($post_data as $name => $value) {
$encoded .= urlencode($name).'='.urlencode($value).'&';
}
$scrapHTML = makeCurlPostRequest($url, $headerz, $encoded);
return $scrapHTML;
}
CheckUrl, принимает 3 параметра, $ file link файла для загрузки, $ url url для запроса и $ headerz являются значениями заголовка.
Теперь я загрузил тестовый файл
a.txt
с содержанием
ABCDABCDABCD
Затем, после успешного запроса и печати ответав веб-браузере с использованием ti выводит это
HTTP / 1.1 200 OK Дата: пт, 08 июля 2011 07:25:43 GMT Сервер: Apache / 2.2.16 (Debian) X-Powered-By:PHP / 5.3.3-7 + squeeze1 Срок действия истекает: Пн, 26 Июл 1997, 05:00:00 GMT Последнее изменение: Пт, 08 Июл 2011 07: 25: 43GMT Cache-Control: нет кеша, обязательно повторная проверка Pragma: нет-cache Content-Disposition: filename = "a.txt" Соединение: закрыть Accept-Ranges:bytes Content-Length: 1 Content-Type: application / force-download ABCDABCDABCD
Где ABCDABCDABCD - это содержимое файла TXT.если это аудиофайл, то после полной загрузки он выводит несколько случайных символов.
Мне нужно предложить пользователю загрузить эти данные вместо того, чтобы сначала сохранить их на сервере или в переменной.
Есть ли способ, я могу проверить заголовок ответа, если возвращается файл и если файл, а затем предложить пользователю загрузить.
любое решение с помощью этого метода CURL?
ИЛИ
<form action="d.php" method="POST">
<input type="hidden" name ="url" value="<?php echo $url;?>"/>
<?php
foreach($scrapHTML->find('input') as $field) {
$name = $field->name;
$value = $field->value;
?>
<input type="hidden" name ="<?php echo $name;?>" value="<?php echo $value;?>"/>
<?php
}
?>
</form>
<script type="text/javascript">
void(document.forms[0].submit());
</script>
Эта HTML-форма отправляет запрос на целевой URL-адрес и в случае успеха запрашивает у пользователя файл для загрузки, но проблема заключается в том, что в случае ошибки пользователь переходит на ЭТОТ веб-сайт об ошибке или на страницу ожидания, которую я не хочу видеть пользователю.
Пожалуйста, предоставьте решение, используя curl или HTML сообщение.
regards, aqif