Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как приотправке http указать прокси


Автор: bems 15.3.2006, 20:07
То есть послать через цепочку прокси (все они в локалке).

Автор: Snowy 15.3.2006, 20:11
IMHO никак

Автор: bems 15.3.2006, 20:28
Другой вопрос (как модератору: сори, но помоему отдельная тема тут неуместна)

Как послать через один прокси (ответ в виде http запроса, компоненты не интерисуют)

Автор: Snowy 15.3.2006, 22:44
Если без компонент, то сложнее.
Самому мучать http прокси грустно.
Под Win2k+ можно заюзать Winhttp.h
Ищи порт файла под дельфи. Описание в MSDN.
Пример на C без прокси:
Код

     BOOL  bResults = FALSE;
    HINTERNET hSession = NULL,
              hConnect = NULL,
              hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen(  L"A WinHTTP Example Program/1.0", 
                             WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                             WINHTTP_NO_PROXY_NAME, 
                             WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession)
        hConnect = WinHttpConnect( hSession, L"www.wingtiptoys.com",
                                   INTERNET_DEFAULT_HTTP_PORT, 0);

    // Create an HTTP Request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L"PUT", L"/writetst.txt", 
                                       NULL, WINHTTP_NO_REFERER, 
                                       WINHTTP_DEFAULT_ACCEPT_TYPES, 0);

    // Send a Request.
    if (hRequest) 
        bResults = WinHttpSendRequest( hRequest, 
                                       WINHTTP_NO_ADDITIONAL_HEADERS, 0,
                                       WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
    // Place additional code here.
    // Report any errors.
    if (!bResults)
        printf("Error %d has occurred.\n",GetLastError());
    // Close any open handles.
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);

По аналогии просто добавляем параметры прокси, имя, пароль.
Если прокси поддерживает доступ без пароля, то можно и на голых сокетах попробовать.

Автор: bems 15.3.2006, 22:50
Голые сокеты!
Какой текст запроса (нужен не код, с этим разберусь) послать для прокси?

Автор: Snowy 15.3.2006, 22:56
Еще вариант: WinInet.
В InternetOpen можно указать прокси, отличный от дефолтового.

Автор: Snowy 15.3.2006, 23:23
Цитата

GET http://www.Snowy.ru:80/ HTTP/1.1
Content-Type: text/html
Host: www.Snowy.ru
Accept: text/html, */*
User-Agent: SuperBrowser/1.0
Proxy-Authorization: Basic U25vd3k6c3Nz


C авторизацией сложнее.
Без авторизации последняя строка не нужна.

Автор: bems 16.3.2006, 14:24
Спасибо. Этого мало, но уже можно начать. А потом я раскручу. Щас роюсь в спецификации - ну блин и намудрили! Одна только нормальная форма когототам чего стоит! Ну это уже сугубо мои проблемы. Спасибо!

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