Foxtable(狐表)用户栏目专家坐堂 → [求助]ip获取浏览器行HttpClient不行的问题


  共有2143人关注过本帖树形打印复制链接

主题:[求助]ip获取浏览器行HttpClient不行的问题

帅哥哟,离线,有人找我吗?
浙江仔
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1325 积分:9586 威望:0 精华:1 注册:2010/7/21 14:20:00
[求助]ip获取浏览器行HttpClient不行的问题  发帖心情 Post By:2019/6/20 8:52:00 [只看该作者]

用浏览器打开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
该怎么设置?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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)

 


 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1325 积分:9586 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2019/6/20 9:34:00 [只看该作者]

HttpClient 有没有hc.UserAgent?



 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/20 9:42:00 [只看该作者]

以下是引用浙江仔在2019/6/20 9:34:00的发言:
HttpClient 有没有hc.UserAgent?


 

目前不能设置这些。


 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1325 积分:9586 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2019/6/20 10:14:00 [只看该作者]

谢谢,能获取网页框架数据,但是ip地址这数据获取不到,如图中红框的,不在str中

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/20 10:23:00 [只看该作者]

 

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1325 积分:9586 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1325 积分:9586 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2019/6/20 13:50:00 [只看该作者]

谢谢

 回到顶部