我正在尝试使用他们在此处指定的呼叫更新我在no-ip.com上的IP地址 http://www.noip.com/integrate/request
到目前为止,我试过
Dim webAddress As String = "http://username:password@dynupdate.no-ip.com/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4"
Process.Start(webAddress)
这会给出错误 附加信息:系统找不到指定的文件
我试过这个
Dim req As System.Net.WebRequest = System.Net.WebRequest.Create("http://username:password@dynupdate.no-ip.com/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4")
Dim resp As System.Net.WebResponse = req.GetResponse
Str = resp.GetResponseStream
它给出了错误 附加信息:无效的URI:指定的端口无效。
并尝试使用WebBrowser
WebBrowser1.navigate("http://username:password@dynupdate.no-ip.com/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4")
它给出了错误 附加信息:价值不在预期范围内。
我认为可能与这些控件有关,不喜欢链接是如何形成的
顺便说一句,我不想使用no-ip自己的客户端ip更新程序,当然我更改了链接上的详细信息:) 当我在Chrome中复制并粘贴链接时,它可以正常工作并按预期更改IP更新 现在工作正常
Dim username As String = HttpUtility.UrlEncode("XXX@XXX.XXX")
Dim password As String = HttpUtility.UrlEncode("XXX")
Dim query As String = String.Format("http://{0}:{1}@dynupdate.no-ip.com/nic/update?hostname=XXXXXX.ddns.net&myip=" & TextBox2.Text, username, password)
Process.Start(query)
但理想情况下,我想在不打开浏览的情况下处理代码中的请求和响应(我只是试着检查我收到错误的原因,但这不是理想的解决方案)
当我尝试这个时
WebBrowser1.Navigate(query)
它工作正常,现在很好,但在使用我喜欢使用的代码时仍然会出错。
Dim req As System.Net.WebRequest = System.Net.WebRequest.Create(query)
Dim resp As System.Net.WebResponse = req.GetResponse
Str = resp.GetResponseStream
这次我收到错误401 Unauthorized
答案 0 :(得分:1)
您展示的网址示例完美无缺。
Probablly会发生的事情是,在您的真实代码中,您需要设置包含空格或非法字符的用户名或密码,您需要对其进行转义/编码。
您可以使用 System.Web.HttpUtility.UrlEncode 功能:
如果在HTTP中传递空格和标点符号等字符 没有编码的流,它们可能在接收时被误解释 结束。 URL编码转换URL中不允许的字符 进入角色 - 实体等价物
然后:
Dim username As String = HttpUtility.UrlEncode("username")
Dim password As String = HttpUtility.UrlEncode("password")
Dim query As String =
String.Format("http://{0}:{1}@dynupdate.no-ip.com/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4/", username, password)
Process.Start(query)
对可能包含非法字符的每个值(如果有)执行相同的操作,例如传递给hostname
参数的值。
另外,为了更安全,请在地址的末尾添加/
广告。