如何获得连接的绝对地址

时间:2021-04-24 03:41:42
比如
http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin&pwd=admin
这个地址打开后会有个跳转,现在问题
1: 如何获取跳转后的绝对地址  http://www.ynsuji.com/admin/htmledit/admin_default.asp

2: 用winsock或xmlhttp获取跳转后的地址http://www.ynsuji.com/admin/htmledit/admin_default.asp的源码后,如何获取那个“样式管理”的绝对地址http://www.ynsuji.com/admin/htmledit/admin_style.asp,注意是绝对地址,不是相对地址admin_style.asp

不可以用webbrowser!!100分~~~
不要回答获取相对地址后加上一个固定字符头什么的,不可以的,除非你可以找到这个固定的字符串头

6 个解决方案

#1


调用API搞定:)
'---------------------------------------------------------------------------------------
' 模块      : Form1
' 时间      : 2012-4-11 08:50
' 作者      : 杨过.网狐.cn
' 功能      :
' 备注      : http://topic.csdn.net/u/20120410/23/91215c7d-adc0-4dc8-83a9-e2ae596c235d.html
' 如何获得连接的绝对地址[问题点数:100分]
'http://www.ex-designz.net/apidetail.asp?api_id=464
'InternetCombineUrl Visual Basic 6 API Function
'---------------------------------------------------------------------------------------

Option Explicit

Private Declare Sub InternetCombineUrlA Lib "wininet.dll" (ByVal lpszBaseUrl As _
    String, ByVal lpszRelativeUrl As String, ByVal lpszBuffer As String, ByRef lpdwBufferLength As _
    Long, ByVal dwFlags As Long)
Private Declare Sub InternetCombineUrl Lib "wininet.dll" Alias "InternetCombineUrlW" (ByVal lpszBaseUrl As _
    Long, ByVal lpszRelativeUrl As Long, ByVal lpszBuffer As Long, ByRef lpdwBufferLength As _
    Long, ByVal dwFlags As Long)

Private Const ICU_BROWSER_MODE = &H2000000
Private Const ICU_DECODE = &H10000000
Private Const ICU_ENCODE_PERCENT = &H1000
Private Const ICU_ENCODE_SPACES_ONLY = &H4000000
Private Const ICU_ESCAPE = &H80000000
Private Const ICU_NO_ENCODE = &H20000000
Private Const ICU_NO_META = &H8000000
Private Const ICU_USERNAME = &H40000000

Private Sub Form_Load()
Dim strBuffer As String
strBuffer = String(255, 0)
InternetCombineUrlA "http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin&pwd=admin", _
    "admin_style.asp", strBuffer, 255, ICU_ENCODE_PERCENT
strBuffer = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
Debug.Print strBuffer

'新世纪推荐使用unicode版本API
strBuffer = String(255, 0)
InternetCombineUrl StrPtr("http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin&pwd=admin"), _
    StrPtr("admin_style.asp"), StrPtr(strBuffer), 255, ICU_ENCODE_PERCENT
strBuffer = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
Debug.Print strBuffer


End Sub

#2


引用 1 楼  的回复:
调用API搞定:)
VB code
'---------------------------------------------------------------------------------------
' 模块      : Form1
' 时间      : 2012-4-11 08:50
' 作者      : 杨过.网狐.cn
' 功能      :
' 备注      :……


请问你这样的方法如果遇到比如某个页面这个页面必须先登陆然后打开才可以提取某相对地址的绝对地址的,用你这个写法也可以直接提取吗? 还有你这样是不是意味着页面所有的相对地址前面都是加这个字符串?

#3


是不是一个页面的相对地址对应的绝对地址部分是相同的?
包括跳转后的地址也是header里的Location部分+InternetCombineUrlA Url,"", strBuffer, 255,ICU_ENCODE_PERCENT
就可以了?

#4


研究了一下,这个API莫非其实就是个字符串操作API??
就是搜索最后一个/然后把它前面的部分提取出来就行了? 

#5


你看那网址上的说明(应该是从微软MSDN上复制过来的)
InternetCombineUrl Function

--------------------------------------------------------------------------------

Combines a base and relative URL into a single URL. The resultant URL will be canonicalized (see InternetCanonicalizeUrl).

老兄怎么会以为就是“就是搜索最后一个/然后把它前面的部分提取出来就行了?”,比如这个
InternetCombineUrl StrPtr("http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin/&pwd=admin"), _
    StrPtr("../admin_style.asp"), StrPtr(strBuffer), 255, ICU_ENCODE_PERCENT
输出:
http://www.ynsuji.com/admin/admin_style.asp

#6


引用 5 楼  的回复:
你看那网址上的说明(应该是从微软MSDN上复制过来的)
InternetCombineUrl Function

--------------------------------------------------------------------------------

Combines a base and relative URL into a single URL. The……


谢谢,这个我自己也发现了,是的,不过参数我百度了下觉得应该用ICU_BROWSER_MODE 好一点,你说呢

#1


调用API搞定:)
'---------------------------------------------------------------------------------------
' 模块      : Form1
' 时间      : 2012-4-11 08:50
' 作者      : 杨过.网狐.cn
' 功能      :
' 备注      : http://topic.csdn.net/u/20120410/23/91215c7d-adc0-4dc8-83a9-e2ae596c235d.html
' 如何获得连接的绝对地址[问题点数:100分]
'http://www.ex-designz.net/apidetail.asp?api_id=464
'InternetCombineUrl Visual Basic 6 API Function
'---------------------------------------------------------------------------------------

Option Explicit

Private Declare Sub InternetCombineUrlA Lib "wininet.dll" (ByVal lpszBaseUrl As _
    String, ByVal lpszRelativeUrl As String, ByVal lpszBuffer As String, ByRef lpdwBufferLength As _
    Long, ByVal dwFlags As Long)
Private Declare Sub InternetCombineUrl Lib "wininet.dll" Alias "InternetCombineUrlW" (ByVal lpszBaseUrl As _
    Long, ByVal lpszRelativeUrl As Long, ByVal lpszBuffer As Long, ByRef lpdwBufferLength As _
    Long, ByVal dwFlags As Long)

Private Const ICU_BROWSER_MODE = &H2000000
Private Const ICU_DECODE = &H10000000
Private Const ICU_ENCODE_PERCENT = &H1000
Private Const ICU_ENCODE_SPACES_ONLY = &H4000000
Private Const ICU_ESCAPE = &H80000000
Private Const ICU_NO_ENCODE = &H20000000
Private Const ICU_NO_META = &H8000000
Private Const ICU_USERNAME = &H40000000

Private Sub Form_Load()
Dim strBuffer As String
strBuffer = String(255, 0)
InternetCombineUrlA "http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin&pwd=admin", _
    "admin_style.asp", strBuffer, 255, ICU_ENCODE_PERCENT
strBuffer = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
Debug.Print strBuffer

'新世纪推荐使用unicode版本API
strBuffer = String(255, 0)
InternetCombineUrl StrPtr("http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin&pwd=admin"), _
    StrPtr("admin_style.asp"), StrPtr(strBuffer), 255, ICU_ENCODE_PERCENT
strBuffer = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
Debug.Print strBuffer


End Sub

#2


引用 1 楼  的回复:
调用API搞定:)
VB code
'---------------------------------------------------------------------------------------
' 模块      : Form1
' 时间      : 2012-4-11 08:50
' 作者      : 杨过.网狐.cn
' 功能      :
' 备注      :……


请问你这样的方法如果遇到比如某个页面这个页面必须先登陆然后打开才可以提取某相对地址的绝对地址的,用你这个写法也可以直接提取吗? 还有你这样是不是意味着页面所有的相对地址前面都是加这个字符串?

#3


是不是一个页面的相对地址对应的绝对地址部分是相同的?
包括跳转后的地址也是header里的Location部分+InternetCombineUrlA Url,"", strBuffer, 255,ICU_ENCODE_PERCENT
就可以了?

#4


研究了一下,这个API莫非其实就是个字符串操作API??
就是搜索最后一个/然后把它前面的部分提取出来就行了? 

#5


你看那网址上的说明(应该是从微软MSDN上复制过来的)
InternetCombineUrl Function

--------------------------------------------------------------------------------

Combines a base and relative URL into a single URL. The resultant URL will be canonicalized (see InternetCanonicalizeUrl).

老兄怎么会以为就是“就是搜索最后一个/然后把它前面的部分提取出来就行了?”,比如这个
InternetCombineUrl StrPtr("http://www.ynsuji.com/admin/htmledit/admin_login.asp?action=login&usr=admin/&pwd=admin"), _
    StrPtr("../admin_style.asp"), StrPtr(strBuffer), 255, ICU_ENCODE_PERCENT
输出:
http://www.ynsuji.com/admin/admin_style.asp

#6


引用 5 楼  的回复:
你看那网址上的说明(应该是从微软MSDN上复制过来的)
InternetCombineUrl Function

--------------------------------------------------------------------------------

Combines a base and relative URL into a single URL. The……


谢谢,这个我自己也发现了,是的,不过参数我百度了下觉得应该用ICU_BROWSER_MODE 好一点,你说呢