Http request + session or cookies

SCIF32

На чем написать прогу, отсылающую http запрос и получающую ответ.
Хочется чтобы в языке были средства, разбирающие и собирающие http запрос и умеющие работать c cookies (или сессиями).
ОС Linux.
Из арсенала php, perl, c++;
По мимо языка интересует название библиотеки которую использовать или ключевые слова по которым искать.

sbs-66

curl + любой из перечисленных языков
В php и perl можно и ручками сформировать и разобрать http-запрос и ответ, ежели не очень сложный.

Helga87

ruby, пример отсылки и разбора http-запроса:
require 'net/http'
h = Net::HTTP.new('forum.b.gz.ru', 80)
resp, data = h.get('/ubbthreads.php', nil )
data.scan(/Board=([^&\"]+)/).uniq.each{|forum| print forum, "\r\n"}
Выведется список названий форумов:
Common
current
University
society
study
diaspora
faq
prog
soft
Network
mobile
market
services
job
behemoth
health
lovesex
havcheg
media
games
automoto
sport
hobby
flood
zone
forum
revol
garbage

sbs-66

В php можно вообще file_get_content( 'http://forum.b.gz.ru/ubbthreads.php' ) сделать. Тебя про куки спрашивают.

maggi14

я это делал стандартными средствами явы. не сказал бы, что очень удобно, но и не особо сложно.

SCIF32

а как класс называется?

maggi14

стринги и сокеты обычные. Не помню точных классов, я явой почти не занимался.

Werdna

а я тут написал классик, который неблокирующе конектится, и типа если данные можно забрать, то забирает.
Смысл был чтобы прососов никогда не было. Ещё он keep-alive держит, но если конекшн потеряет — восстановит
вот, могу поделиццо

SCIF32

то есть, кукисы вручную разбирал?
просто думал что какой-либо из языков включает в себя парсер http запроса и этот парсер не придется заимствовать или писать самому.
а сокеты в принципе есть почти везде.

maggi14

да

SCIF32

спасибо
но, думаю, ограничусь php.

Helga87

В php можно вообще file_get_content( 'http://forum.b.gz.ru/ubbthreads.php' ) сделать. Тебя про куки спрашивают.
Тоже никаких проблем
Программа логинится на форум и выводит список разделов, которые видны данному пользователю: 
require 'net/http'

user_name="user"
password="pwd"

session = Net::HTTP.new('forum.b.gz.ru', 80)

data = "Loginname=#{user_name}&Loginpass=#{password}&buttlogin=Login"
headers = { 'Content-Type' => 'application/x-www-form-urlencoded'}
resp, resp_data = session.post('/start_page.php', data, headers)

cookie = resp['set-cookie'].scan(/(\w+=\w+)[^,]*[,]?/).join("; ")
headers = { "Cookie" => cookie }
resp, resp_data = session.get('/ubbthreads.php', headers)

resp_data.scan(/Board=([^&\"]+)/).uniq.each{|forum| print forum, "\r\n"}

kruzer25

php, curl

katrin2201

А там HttpURLConnection есть =)
Он правда кривоват был, его от одной версии к другой бывает меняют.
Но он есть =) В 1.5 вроде даже боле мене нормальный =)

sbs-66

То же самое на php и perl можно написать. Столько же строк займёт. Ты ж ручками http-ответ разбираешь. Вот если бы экземпляр Net::HTTP сам с куками работал - тогда да, круто.

SCIF32

Всем спасибо!
Сделал все, используя дебиановский пакет php-http-request.
А так компактно сам я бы не смог написать .
Оставить комментарий
Имя или ник:
Комментарий: