1

ここのページに従って指定した呼び出しを使用して、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 updater を使用したくありません。もちろん、リンクの詳細を変更しました :) 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 が表示されます

4

1 に答える 1

1

あなたが示したURLの例は完璧に機能します。

おそらく、実際のコードでは、空白または不正な文字を含むユーザー名またはパスワードを設定しているため、それらをエスケープ/エンコードする必要があります。

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ます。

また、安全性を高めるために/、住所の末尾に広告を掲載してください。

于 2015-11-04T15:14:42.770 に答える