HTTP запрос с помощью php
От: Serheyka  
Дата: 24.11.03 21:26
Оценка:
Добрый вечер.
У меня вот какой вопрос:
Это с php связано.
Скачивать файлы с сайтов при помощи php понятно как.
А мне нужно чтобы скрипт сделал запрос к серверу с параметрами:
www.anysite.com?<параметры>
И ответ в виде файла html или txt нужно сохранить в папке где находится сам
скрипт присвоив ему какое-нибудь имя.
Re: HTTP запрос с помощью php
От: Aton Россия http://ruby.inuse.ru
Дата: 24.11.03 21:38
Оценка: -1
Здравствуйте, Serheyka, Вы писали:

S>Добрый вечер.

S>У меня вот какой вопрос:
S>Это с php связано.
S>Скачивать файлы с сайтов при помощи php понятно как.
S>А мне нужно чтобы скрипт сделал запрос к серверу с параметрами:
S>www.anysite.com?<параметры>
S>И ответ в виде файла html или txt нужно сохранить в папке где находится сам
S>скрипт присвоив ему какое-нибудь имя.

fopen
Re: HTTP запрос с помощью php
От: Aton Россия http://ruby.inuse.ru
Дата: 24.11.03 21:38
Оценка:
Здравствуйте, Serheyka, Вы писали:

S>Добрый вечер.

S>У меня вот какой вопрос:
S>Это с php связано.
S>Скачивать файлы с сайтов при помощи php понятно как.
S>А мне нужно чтобы скрипт сделал запрос к серверу с параметрами:
S>www.anysite.com?<параметры>
S>И ответ в виде файла html или txt нужно сохранить в папке где находится сам
S>скрипт присвоив ему какое-нибудь имя.

Если в кратце то fopen
Re: HTTP запрос с помощью php
От: DSD Россия http://911.ru/cv
Дата: 24.11.03 22:42
Оценка:
Здравствуйте, Serheyka, Вы писали:

S>Добрый вечер.

S>У меня вот какой вопрос:
S>Это с php связано.
S>Скачивать файлы с сайтов при помощи php понятно как.
S>А мне нужно чтобы скрипт сделал запрос к серверу с параметрами:
S>www.anysite.com?<параметры>
S>И ответ в виде файла html или txt нужно сохранить в папке где находится сам
S>скрипт присвоив ему какое-нибудь имя.


Многие приведут тут простейший пример вроде этого:

   file_put_contents($filename, file_get_contents($uri));


но т.к. не во всех версиях php это работает, да и не мешает разжевать внутреннюю работу функций, то приведу более полный пример:

<?php 

function get_url_components($address) {
  $url_checking_regexp_proto = "((http|ftp)\\:\\/\\/)";
  $url_checking_regexp_hname = "[a-z\\d]([a-z\\d\\_\\-]*[a-z\\d])?";
  $url_checking_regexp_host = "($url_checking_regexp_hname([\\.]$url_checking_regexp_hname)*[\\.][a-z]{2,4})";
  $url_checking_regexp_port = "(:(\\d*))?";
  $url_checking_regexp_path = "([\\/])?([^\\s\\<\\(\\)]*)?";
  $url_checking_regexp = "/$url_checking_regexp_proto$url_checking_regexp_host$url_checking_regexp_port$url_checking_regexp_path/im";
  if (!preg_match($url_checking_regexp, $address, $matches)) return FALSE;
  $proto = $matches[2];
  $host = $matches[3];
  $port = ($matches[8])?$matches[8]:80;
  $path = $matches[9].$matches[10];
  if (strlen(trim($path))==0) $path='/';
  return array($proto, $host, $port, $path);
}

function get_url_text($address, $timeout=10) {
  $url_arr = get_url_components($address);
  if (!is_array($url_arr) || strtolower($url_arr[0])!='http') return '';

  $fp = fsockopen ($url_arr[1], $url_arr[2], $errno, $errstr, $timeout);
  if (!$fp) return '[error: failed open socket!]';
  $host = $url_arr[1].(($url_arr[2]==80)?"":":".$url_arr[2]);
  fwrite($fp, "GET ".$url_arr[3]." HTTP/1.0\n");
  fwrite($fp, "Host: $host\n");
  fwrite($fp, "Referer: http://$host/\n");
  fwrite($fp, "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\n");
  fwrite($fp, "Pragma: no-cache\n");
  fwrite($fp, "Cache-Control: no-cache\n");
  fwrite($fp, "Connection: close\n");
  fwrite($fp, "\n");
  $res_arr = array();
  $hd_arr = array();
  while (!feof($fp)) {
      $str = fgets($fp, 1024);
      if (strlen(trim($str))==0) break;
      array_push($hd_arr, $str);
  }
  while (!feof($fp)) array_push($res_arr, fread($fp, 1024));
  fclose ($fp);
  return implode('', $res_arr);
}

function put_file_contents($filename, $contents='') {
   if (file_exists($filename)) unlink($filename);
   if (!($fp = fopen ($filename, "w"))) return '[error: failed open file!]';
   fwrite ($fp, $contents);
   fclose ($fp);
}
                                
header("Content-Type: text/plain; charset=windows-1251");
$url = trim(stripslashes($url));
if (strlen($url)==0) $url = "http://911.ru/debug";
$contents = get_url_text($url);
print($contents);
put_file_contents("./writezone/dnl.txt", $contents);

? >



Скрипт: http://911.ru/to_rsdn/get_url_contents.php
Результат работы(обновляется после каждого запроса): http://911.ru/to_rsdn/writezone/dnl.txt
Исходник: http://911.ru/to_rsdn/get_url_contents.php.html

Скрипту можно указать параметр url, например: http://911.ru/to_rsdn/get_url_contents.php?url=http://rsdn.ru
если параметр не указан, по умолчанию подставляется http://911.ru/debug


P.S. естесственно, т.к. писал сходу, возможны мелкие ошибки и неточности в алгоритмах.
--
DSD
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.