LINUX.ORG.RU

Получить данные через HTTP proxy


0

0

Есть http прокси, на localhost:8080.
Хочу получить файл из инета. Делаю:

telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Пишу:

CONNECT myserver.ru:443 HTTP/1.1
HOST myserver.ru:443

Получаю:
HTTP/1.1 200 Connection established
Via: 1.1 RELAY

Пишу:
GET http://myserver.ru/test/news.php HTTP/1.0

После этого получаю:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
<blockquote>Hint: <a href="https://myserver.ru/"><b>https://myserver.ru/</b>
</a></blockquote></p>
<hr />
<address>Apache/2.0.46 (Red Hat) Server at myserver.ru Port 443</address>
</body></html>
Connection closed by foreign host.

Как сформировать правильный запрос? Что именно надо писать
и как правильно работать с http proxy?

Пробовал так:
GET https://myserver.ru/test/news.php HTTP/1.0
То же самое.

Забыл сказать.
Пишу на Qt, хочу записать данные в QTextBrowser, но как работать
с http proxy, не нашёл. Решил сформировать запрос и посылать его
на мой прокси. Поэтому perl/etc ... не предлагать.

RomanU
() автор топика

Ты наверное еще толком не проснулся - пойди кофейку бахни :-)))

> HOST myserver.ru:443

Ты идешь на SSL порт!

На что получаешь закономерный ответ:
> Your browser sent a request that this server could not understand.
> Reason: You're speaking plain HTTP to an SSL-enabled server port.

Для невладеющих албанским перевожу:
Сервер не понимает запрос, отправленный вашим броузером.
Причина: Вы посылаете HTTP запрос открытым текстом на SSL порт.

Асилил?

Рекомендации:
1. Проснуться и перестать тормозиить.
2. Выучить албанский.
3. Не изобретать велосипед а использовать какую-либо библиотеку.
Из своего опыта рекомендую libcurl (http://curl.haxx.se/libcurl/).
Она умеет HTTP,HTTPS,FTP,proxy, разные аутентикации и все такое прочее. Причем все это через простой и понятный API.

(BTW, а в самом Qt точно нет API для HTTP-клиента?)

HTH

Onanim
()

$ telnet proxy_host proxy_port
Trying proxy_host...
Connected to proxy_host.
Escape character is '^]'.
HEAD http://ya.ru/ HTTP/1.0

HTTP/1.0 200 OK
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=windows-1251
Date: Tue, 08 Nov 2005 08:48:33 GMT
Last-Modified: Mon, 07 Nov 2005 15:13:13 GMT
Accept-Ranges: bytes
Connection: close
Content-Length: 2005

Connection closed by foreign host.


Либо по HTTP/1.1

$ telnet proxy_host proxy_port
Trying proxy_host...
Connected to proxy_host.
Escape character is '^]'.
HEAD http://ya.ru/ HTTP/1.1
Host: ya.ru

HTTP/1.1 200 OK
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=windows-1251
Date: Tue, 08 Nov 2005 08:49:12 GMT
Last-Modified: Mon, 07 Nov 2005 15:13:11 GMT
Accept-Ranges: bytes
Connection: close
Content-Length: 2005

Connection closed by foreign host.

1) Читай блин RFC!!! Там всё написано!
2) Не используй велосипед(как сказал предыдущий оратор)
Давно уже всё написано до тебя.

Deleted
()

Он почти всё правильно делает...орать не надо, даже если у тебя 5 звёзд...
"Многие знают мого но никто не знает всего" (с) кто то умный сказал

В RFC 2616 (HTTP 1.1) описаны следующие методы: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT.

Так вот многие про этот CONNECT не знают....ну и пусть не знают, олени...

почитать про коннкт тут http://www.nestor.minsk.by/sr/2003/04/30417.html

dlomin
()
Ответ на: комментарий от dlomin

2 Dimez and dlomin:

Парни, вы че - тоже не проснулись? :-)))
Вы хоть изначальный постинг асилили?
Человек хочет HTTPS. Причем он правильно понимает,
что для этого ему нужен именно CONNECT через прокси.

Чего он не понимает - так это того, что он должен теперь
сам сделать SSL connection и через него уже посылать свои
запросы. Бузусловно, можно вручную подрочить OpenSSL.
Но быстро кончить не получиться. :-)))
А можно взять готовую библиотеку (libcurl, libwww, ...)
и не иметь геморроя с HTTP протоколом, SSL и прочим
"закатом солнца вручную".

HTH

Onanim
()
Ответ на: комментарий от Onanim

2Onanim - полностью с тобой согласен...

Просто RomanU может хочет ручакми поробовать, а потом либу прикрутит...

а Dimez орёт "Читай блин RFC!!!", показывая при этом тест с методом HEAD (хм, не знает про метод CONNECT?)


dlomin
()
Ответ на: комментарий от dlomin

Всем спасибо, уже разобрался!

Теперь прокомментирую:)

2dlomin:
Спасибо за поддержку, хоть кто-то не начал сразу орать:)

2Onanim:
я кое-что не объяснил, поэтому мой вопрос наверное кажется глупым.
Я попробовал сначала через QHttp, но неверно использовал этот класс.
Поэтому стал разбираться, что же нужно для работы с прокси.
Я пробовал не указывать 443, у меня ничего
не получалось. Я поискал в инете, наткнулся на CONNECT,
присоединился к 443 и ... получил 200 ! :) Поэтому подумал, что буду
делать через HTTPS.
Но это я делал наспех.

2Dimez:
Ответ хороший, но всё оказалось значительно проще.

В Qt есть класс QHttp, он прекрасно работает, 
Просто я не сразу разобрался, как его использовать с прокси.

    QHttpRequestHeader header( "GET", "http://myserver.ru/test/news.php"; );
    header.setValue( "Host", "myserver.ru" );
    http->setHost( "localhost", 8080 );
    http->request( header );

RomanU
() автор топика
Ответ на: комментарий от Onanim

> Парни, вы че - тоже не проснулись? :-)))

(08.11.2005 11:52:41)

Да, слишком рано для меня :)

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.