Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > как создать соединение с HTTP сервером?


Автор: Spieler 5.1.2003, 01:30
Послушайте, можно ли написать присоединение к HTTP серверу, не пользуясь всякими дополнительными модулями типа UserAgent? А то мне это нельзя... 8( :exclamation

Автор: Семён Розовых 6.1.2003, 00:16
Конечно можно. Для этого надо всего лишь использовать модуль IO::Socket. Он входит в стандартную подставку Perl. Короче это делается так.

use IO::Socket;

$host=www.dwcgr0up.com;
$port=80; #Нам же надо по http

#Создаем новое соединение:
$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => "TCP") or die print "connection failed to $host:$port\n";

print $socket "GET http://www.dwcgr0up.com/index.php"  HTTP/1.1\n"; #Метод, запрашиваемя страница и версия протокола.

# Дальше и так всё понятно. Если нет, то почитай о протоколе HTTP.

print $socket "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */*\n";
print $socket "Accept-Language: ru\n";
print $socket "Content-Type: application/x-www-form-urlencoded\n";
print $socket "Accept-Encoding: gzip, deflate\n";

print $socket "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)\n";
print $socket "Host: $host\n";
print $socket "Connection: Keep-Alive\n";
print $socket "Connection: close\n\n";

Автор: NightGoblin 7.1.2003, 17:21
Можно обойтись и без объектного интерфейса. Вот простенькая прога, распечатывающая страничку с хоста, URL которой задан в командной строке (по умолчанию localhost/index.html):

Код

#!/usr/bin/perl

use Socket;

$PROTO = getprotobyname ('tcp'); # Номер протокола TCP
$PORT = 80; # Номер порта HTTP
$n = "\x0d\x0a"; # Символы новой строки в HTTP

$addr = shift || die ("Usage: $0 <URL>\n");

unless ($addr =~ m#^([\w\-\.]+)(?:/(.*))?$#) {
   die ("Incorrect URL format!\nUse something like www.myhost.org/path/page.html\n");
}

($server, $page) = ($1, $2);

# Создать сокет
socket (SERV, PF_INET, SOCK_STREAM, $PROTO) or die ("Cannot create socket: $!\n");

# Подключить сокет к удаленному серверу
connect (SERV, sockaddr_in ($PORT, inet_aton ($server))) or die ("Cannot connect to $server:$PORT: $!\n");

### Соединение установлено.

# Отключить буферизацию для дескриптора SERV
$oh = select (SERV);
$| = 1;
select ($oh);

# Запросить документ
print (SERV "GET /$page HTTP/1.0$n$n");

# Получить и вывести ответ сервера
while (<SERV>) {
   print;
}

# Закрыть соединение
close (SERV);


Уж Socket должен быть в любом дистрибутиве, даже на бесплатном хостинге :))

Автор: Unregistered 29.1.2003, 04:16
А для использования любого модуля достаточно взять его на http://perl.com/CPAN/ бросить в папку со скриптом, а в теле скрипта прописать reqire Filename.pm

Автор: Nekto 5.2.2003, 00:28
Вообще-то, народ, сокеты многими сайтами обрубаются, т.е. вам не будет разрешать к ним подконектится. Это не есть хорошо. Есть иной выход, причем весьма неплохой - LWP.
Этот модуль позволяет стукаться к сайтам, смотреть инфу, брать контент (картинки не всчет), причем конектится он может и черех прокси и как угодно, хоть прикинувшись браузером. Кроме того, он позволяет играться HTTP заголовком. И разумеется, входящими в него кукями smile.gif
Взять можно со СПАНА

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)