以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]ip获取浏览器行HttpClient不行的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=136731)

--  作者:浙江仔
--  发布时间:2019/6/20 8:52:00
--  [求助]ip获取浏览器行HttpClient不行的问题
用浏览器打开http://www.ip138.com/,显示本机的外网ip,正常

但是使用HttpClient,无法连接
Dim url As String = "http://www.ip138.com/"
Dim hc As New HttpClient(url)
Dim ret As String = hc.GetData()
msgbox(ret)

是不是对方服务器限制了什么参数,需要提交过去?比如说User-Agent
该怎么设置?


--  作者:有点甜
--  发布时间:2019/6/20 9:07:00
--  

比如

 

Dim body As String = ""
Dim req = System.Net.WebRequest.Create("http://www.ip138.com")
\'req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; rv:57.0) Gecko/20100101 Firefox/57.0"
\'Dim aryBuf As Byte() = Encoding.UTF8.GetBytes(body)
\'req.ContentLength = aryBuf.Length
\'Dim writer = req.GetRequestStream()
\'writer.Write(aryBuf, 0, aryBuf.Length)
\'writer.Close()
\'writer.Dispose()
Dim pos = req.GetResponse

Dim stm As System.IO.Stream = pos.GetResponseStream()
Dim reader As New System.IO.StreamReader(stm)
Dim str As String = reader.ReadToEnd
pos.Close
stm.Close
reader.close

msgbox(str)

 


--  作者:浙江仔
--  发布时间:2019/6/20 9:34:00
--  
HttpClient 有没有hc.UserAgent?



--  作者:有点甜
--  发布时间:2019/6/20 9:42:00
--  
以下是引用浙江仔在2019/6/20 9:34:00的发言:
HttpClient 有没有hc.UserAgent?


 

目前不能设置这些。


--  作者:浙江仔
--  发布时间:2019/6/20 10:14:00
--  
谢谢,能获取网页框架数据,但是ip地址这数据获取不到,如图中红框的,不在str中

查了一下,原来是由其他地址数据获取的,http://200019.ip138.com/


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20190620101244.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2019/6/20 10:20:26编辑过]

--  作者:有点甜
--  发布时间:2019/6/20 10:23:00
--  

 

要改成这个地址,如 http://200019.ip138.com/

 

这个地址每年不是固定的。


--  作者:浙江仔
--  发布时间:2019/6/20 11:44:00
--  
通过两次获取,第一次获取地址,然后用这个地址获取真实ip


\'\'\'
Dim req = System.Net.WebRequest.Create("http://www.ip138.com")
req.C
req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; rv:57.0) Gecko/20100101 Firefox/57.0"
Dim pos = req.GetResponse
Dim stm As System.IO.Stream = pos.GetResponseStream()
Dim reader As New System.IO.StreamReader(stm,Encoding.Default)
Dim str As String = reader.ReadToEnd
pos.Close
stm.Close
reader.close

Dim start As Integer = str.IndexOf("<iframe src=")
Dim End1 As Integer =str.IndexOf("nofollow")
Dim ret As String
If start >0 And End1 >start Then
    Dim url As String =trim(str.SubString(start+13,End1-start-20)) \'IP地址,最多15个字符
    Dim hc As New HttpClient(url)
    ret = hc.GetData()
End If

Dim s1 As Integer =ret.Indexof(":[")
Dim s2 As Integer =ret.Indexof("来自:")
Dim ip91,ip92 As String

If s1>0 And s2>s1 Then
    ip91 =trim(ret.SubString(s1+2,s2-s1-4)) 
    
    Dim ss As String =ret.SubString(s2,20)
    Dim s3 As Integer =ss.Indexof("</p>")
    ip92=ss.SubString(3,s3-3)
End If


--  作者:有点甜
--  发布时间:2019/6/20 11:58:00
--  

直接用正则匹配即可,如

 

Dim req = System.Net.WebRequest.Create("http://www.ip138.com")
req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; rv:57.0) Gecko/20100101 Firefox/57.0"
Dim pos = req.GetResponse
Dim stm As System.IO.Stream = pos.GetResponseStream()
Dim reader As New System.IO.StreamReader(stm,Encoding.Default)
Dim str As String = reader.ReadToEnd
pos.Close
stm.Close
reader.close

Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=iframe src="").*?(?="" rel)")
msgbox(mc(0).value)
Dim hc As New HttpClient(mc(0).value)
Dim ret = hc.GetData()

mc = System.Text.RegularExpressions.Regex.Matches(ret , "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")
If mc.count > 0 Then
    msgbox(mc(0).value)
End If


--  作者:浙江仔
--  发布时间:2019/6/20 13:50:00
--  
谢谢