Как получить URL-адрес ответа от HINTERNET - PullRequest
2 голосов
/ 27 декабря 2011

когда я получаю доступ к URL, как это: http://www.misslee.net/_common/inc/mi3dark_down.asp возвращает меня к реальному URL => http://125.141.146.184:8080/download/SetupMisslee_Dark.exe

Полагаю, меня перенаправили ... Я хочу знать перенаправленный URL. Пожалуйста, помогите мне. Как получить URL-адрес ответа от HINTERNET?

 TCHAR szServerName[] = _T("www.misslee.net");  
 TCHAR szFormAction[] = _T("/_common/inc/mi3dark_down.asp");
 TCHAR szHeader[500] = {0,};
 LPCWSTR accept[2]={_T("*/*"), NULL};

 DWORD_PTR dwContext=1;
 BOOL  bResult;
 DWORD  dwSize;

 HINTERNET hInternet = InternetOpen( _T("HTTP-POST"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );

 HINTERNET hConnect = InternetConnect( hInternet, szServerName, INTERNET_DEFAULT_HTTP_PORT, NULL, _T("HTTP/1.1"), INTERNET_SERVICE_HTTP, 0, dwContext);

 HINTERNET hRequest = HttpOpenRequest( hConnect, _T("POST"), szFormAction, _T("HTTP/1.1"), NULL, accept,INTERNET_FLAG_DONT_CACHE, dwContext);

 bResult = HttpSendRequest( hRequest, NULL, 0, NULL, NULL);

// Redirected response url???????????

Ответы [ 3 ]

4 голосов
/ 11 сентября 2014

Использовать InternetQueryOption с флагом INTERNET_OPTION_URL.

INTERNET_OPTION_URL

Извлекает строковое значение, которое содержит полный URL загруженного ресурса.Если исходный URL-адрес содержал какие-либо дополнительные данные, такие как строки поиска или привязки, или если вызов был перенаправлен, возвращаемый URL-адрес отличается от исходного .Этот параметр действителен для дескрипторов HINTERNET, возвращаемых InternetOpenUrl, FtpOpenFile, GopherOpenFile или HttpOpenRequest.Он используется InternetQueryOption.

0 голосов
/ 27 декабря 2011

Я думаю, что вы видите автоматическую обработку перенаправления WinInet, где API получает ответ о перенаправлении и автоматически повторно отправляет другой запрос для возврата данных перенаправленного запроса вызывающей стороне, таким образом обрабатывая перенаправления прозрачно.при этом предоставьте свой запрос с флагом INTERNET_FLAG_NO_AUTO_REDIRECT и отключите перенаправления.Вы получите исходный ответ, запросите заголовки и решите, хотите ли вы отправить второй запрос или нет.

Не обрабатывает перенаправление автоматически.Этот флаг также может использоваться InternetOpenUrl для HTTP-запросов.

0 голосов
/ 27 декабря 2011

Вы можете использовать функцию HttpQueryInfo с флагом запроса информации HTTP_QUERY_LOCATION, чтобы получить местоположение ответа.

Из MSDN:

HTTP_QUERY_LOCATION

33
Извлекает абсолютный унифицированный идентификатор ресурса (URI), используемый в заголовке ответа Location.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...