ServerXMLHTTP запрашивает получение данных, но не возвращает URL последней страницы после перенаправления 301
Я пытаюсь сделать приложение LINK FINDER в ASP
Работающий делится на 5 ступеней
- Отправьте http-запрос на сервер www.foo.com
- Проверьте статус запроса
- Если его 200, то перейдите к шагу 4, в противном случае вы увидите ошибку
- Разобрать всю ссылку
Send http request to server to parsed link
Я могу сделать первые 4 шага, но столкнувшись с проблемой в 5-м шаге
Я получаю 3 типа ссылок
1.) абсолютная ссылка: http://www.foo.com/file.asp
2.) ссылки из корневого каталога, которым необходимо доменное имя, например /folder2/file2.asp
3.) Относительная ссылка: ../file3.asp
Вызов
Когда я запрашиваю www.foo.com, который 301 перенаправляется на www.foo.com/folder3/folder3/file3.asp
Я получаю html-содержимое перенаправленной страницы, но не получаю перенаправленный URL и не могу проверить ссылки 3-го типа
Используя следующий код
Set ServerXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") ServerXmlHttp.open "GET", "http://www.foo.com" ServerXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" ServerXmlHttp.send PostData If ServerXmlHttp.status = 200 Then //My CODE
Надеюсь на быстрый ответ... или любую другую идею для поиска ссылок в asp, vb.net
1 ответ
Это вне возможностей ServerXMLHTTP.
Вместо этого вы должны использовать IWinHttpRequest или другой сторонний компонент, способный управлять перенаправлениями.
В следующем примере req.Option(WHR_URL)
возвращает текущий URL, даже если перенаправлен.
вариант req.option(WHR_EnableRedirects)
является True
по умолчанию, как ServerXMLHTTP.
Итак, я добавил закомментированную строку, показывающую, как отключить перенаправления.
Const WHR_URL = 1
Const WHR_EnableRedirects = 6
'Enum constants are listed at http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx
Dim req
Set req = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
'req.Option(WHR_EnableRedirects) = False 'don't follow the redirects
req.open "GET", "http://www.foo.com", False
req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
req.send PostData
If req.Status = 200 Then
Response.Write "Last URL : " & req.Option(WHR_URL)
End If