以不同方式调用 url 时出现问题

Issue when calling a url in different ways

我正在尝试使用他们在此处根据他们的页面指定的调用更新我在 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")

报错 附加信息:值不在预期范围内。

我认为这可能与这些控件有关,不喜欢 link 的格式

顺便说一句,我不想​​使用 no-ip 自己的客户端 ip 更新程序,当然我更改了 link 上的详细信息 :) 当我将 link 复制并粘贴到 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 Unauthorised

您展示的 url 示例非常完美。

可能发生的情况是,在您的真实代码中,您设置的用户名或密码包含空白 space(s) 或非法字符,您需要 escape/encode 它们。

您可以使用 System.Web.HttpUtility.UrlEncode 函数:

If characters such as blanks and punctuation are passed in an HTTP stream without encoding, they might be misinterpreted at the receiving end. URL encoding converts characters that are not allowed in a URL into character-entity equivalents

然后:

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 参数的值。

另外,为了更安全,请在地址末尾添加一个 / 广告。