Послать HTTP реквест через проксю
От: Аноним  
Дата: 23.11.05 06:54
Оценка:
Народ, хеп ми плиз!

Очень нужно реализовать HTTP запрос (через POST) на один веб-сервак и достать с него страницу. Но у меня доступ инет через прокси на 8080 порту, на которой нужно авторизоваться. Подскажите плиз, как это делается?
Re: Послать HTTP реквест через проксю
От: Logrus Россия  
Дата: 23.11.05 09:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Очень нужно реализовать HTTP запрос (через POST) на один веб-сервак и достать с него страницу. Но у меня доступ инет через прокси на 8080 порту, на которой нужно авторизоваться. Подскажите плиз, как это делается?


Если ты хочешь достать траницу, то лучше это делать через GET

А через проксю пролезть можну двумя способами:
1. Конфигуришь свой инет (через желаемую проксю) стандартным образом из Internet Explorer'a. Затем перед вызовом HttpSendRequest указываешь свой логин и пароль примерно так
    InternetSetOption( hHTTPFile, INTERNET_OPTION_PROXY_USERNAME, szUser, strlen(szUser) );
    InternetSetOption( hHTTPFile, INTERNET_OPTION_PROXY_PASSWORD, szPassword, strlen(szPassword) );

и погнали... у тебя все должно получиться.

2. Сам настраиваешь доступ через прокси сервер при установке соединения
   gAccessType = INTERNET_OPEN_TYPE_PROXY;

   hSession = InternetOpen( sClientInfo, 
                            gAccessType, 
                            pProxyList,    // прокси лист
                            pProxyExclude, // лист прокси исключений
                            gOpenFlags );


По указателю pProxyList ты должен указать список доступных прокси серверов, а в pProxyExclude укажешь список адресов, которые считать локальными и через проксю не маршрутизировать.
Если у тебя два прокси сервера HTTP и FTP, то прокси лист будет выглятеть примерно так (должен закончиться нулем), "http=http://10.10.10.10:8080 ftp=ftp://10.10.10.20:21" А если сервер только один и HTTP, то можешь просто написать "10.10.10.10:8080"

По указателю pProxyExclude можешь написать "<local>", и тоды весь твой локальный трафик мимо денег

Детали глянь в инете или в MSDN.
Удачи!
Re[2]: Послать HTTP реквест через проксю
От: Аноним  
Дата: 23.11.05 11:10
Оценка:
Спасибо большое!
А есть способ продтектировать, есть ли прокси или нет, и если есть, то выкинуть окошко с запросом ввести логин и пароль авторизации?

Я делал например так (при чем на большинстве машин это работало на ура!, окно с запросом авторизации появляется автоматом и после авторизации без проблем достукивается до нужного веб-сервера и все хорошо, но на некоторых машинах получаю эксешн при попытке сделать send):

IXMLHTTPRequestPtr pIXMLHTTPRequest = NULL;
BSTR bstrString = NULL;
HRESULT hr;

try
{
hr = pIXMLHTTPRequest.CreateInstance("Msxml2.XMLHTTP.2.6");
SUCCEEDED(hr) ? 0 : _com_error(hr);

hr = pIXMLHTTPRequest->open("POST", (_bstr_t)sURL, false);
SUCCEEDED(hr) ? 0 : throw _com_error(hr);

hr = pIXMLHTTPRequest->send();
SUCCEEDED(hr) ? 0 : throw _com_error(hr); // И ВОТ ЗДЕСЬ Я ПОЛУЧАЮ ЭКСЕПШН "Access is denied!" И НИКАКОГО ОКНА АВТОРИЗАЦИИ!!!
// В ЧЕМ МОЖЕТ БЫТЬ ПРОБЛЕМА И КУДА КОПАТЬ???

bstrString = pIXMLHTTPRequest->responseText;
...
}

CoUninitialize();
Re[3]: Послать HTTP реквест через проксю
От: Аноним  
Дата: 23.11.05 15:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо большое!

А>А есть способ продтектировать, есть ли прокси или нет, и если есть, то выкинуть окошко с запросом ввести логин и пароль авторизации?


if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,"",
                                          REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&dwResult))
{
    dwType = REG_DWORD;
    dwDataSize = 8;

    if (ERROR_SUCCESS == RegQueryValueEx(hKey,"ProxyEnable",0,&dwType,(LPBYTE)lValue,&dwDataSize))
    {
        if (lValue[0])
        {
            dwType = REG_SZ;
            dwDataSize = 1000;
            if (ERROR_SUCCESS == RegQueryValueEx(hKey,"ProxyServer",0,&dwType,(LPBYTE)sProxyServer,&dwDataSize))
            {
            
            }
        }
    }
    RegCloseKey(hKey);
}
Re[4]: Послать HTTP реквест через проксю
От: Аноним  
Дата: 28.11.05 13:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Спасибо большое!

А>>А есть способ продтектировать, есть ли прокси или нет, и если есть, то выкинуть окошко с запросом ввести логин и пароль авторизации?


А>
А>if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,"",
А>                                          REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&dwResult))
А>{
А>    dwType = REG_DWORD;
А>    dwDataSize = 8;

А>    if (ERROR_SUCCESS == RegQueryValueEx(hKey,"ProxyEnable",0,&dwType,(LPBYTE)lValue,&dwDataSize))
А>    {
А>        if (lValue[0])
А>        {
А>            dwType = REG_SZ;
А>            dwDataSize = 1000;
А>            if (ERROR_SUCCESS == RegQueryValueEx(hKey,"ProxyServer",0,&dwType,(LPBYTE)sProxyServer,&dwDataSize))
А>            {
            
А>            }
А>        }
А>    }
А>    RegCloseKey(hKey);
А>}
А>


Что бы это могло значить???
Re[5]: Послать HTTP реквест через проксю
От: Logrus Россия  
Дата: 28.11.05 16:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>
А>>if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,"",
А>>                                          REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&dwResult))
А>>{
А>>    dwType = REG_DWORD;
А>>    dwDataSize = 8;

А>>    if (ERROR_SUCCESS == RegQueryValueEx(hKey,"ProxyEnable",0,&dwType,(LPBYTE)lValue,&dwDataSize))
А>>    {
А>>        if (lValue[0])
А>>        {
А>>            dwType = REG_SZ;
А>>            dwDataSize = 1000;
А>>            if (ERROR_SUCCESS == RegQueryValueEx(hKey,"ProxyServer",0,&dwType,(LPBYTE)sProxyServer,&dwDataSize))
А>>            {
            
А>>            }
А>>        }
А>>    }
А>>    RegCloseKey(hKey);
А>>}
А>>


А>Что бы это могло значить???


А это если ты забыл, конфигурил ты прокси сервер в эксплорере или нет, то вот таким волшебным способом ты можешь это проверить...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.