URL中的随机字符与vb.net

时间:2012-06-28 11:37:15

标签: c# vb.net loops random webrequest

我正在进行网络请求,需要在每个网址请求中输入静态+随机字符(数字和字母):

Dim postData1 As String = "http://www.xxx.com/......" & rdm & "xxxyyyzzz.htm"
Dim postReq1 As HttpWebRequest = DirectCast(WebRequest.Create(postData2), HttpWebRequest)

Dim postData2 As String = "http://www.xxx.com/......" & rdm & "xxxyyyzzz.htm"
Dim postReq2 As HttpWebRequest = DirectCast(WebRequest.Create(postData2), HttpWebRequest)

etc

请求(总共6个)保持循环。这是我用于随机的代码:

Dim chars = "abcdefghijklmnopqrstuvwxyz0123456789"
            Dim random = New Random()
            Dim result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

            Dim rdmpart = "x1y2z3"
            rdm = rdmpart & result

我需要一系列网址循环并在每个请求上生成一个新的rdm。怎么可能?每当我打电话给“rdm”时,它都会给我相同的响应。提前谢谢。


以下是解决方案:

终于工作了!这让我疯了:) 根据Frito的回答,这就是我的所作所为:

Public Shared Function rdm() As String

        Static random As New Random()
        Dim chars = "abcdefghijklmnopqrstuvwxyz0123456789"
        Dim result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

        Dim rdmpart = "x1y2z3"
        rdm = rdmpart & result

    End Function

用一个简单的“rdm()调用”Yeay!

3 个答案:

答案 0 :(得分:1)

试试这个:

随机使用同一时间种子。

所以,只使用一个随机对象并初始化它。

抱歉我的英语不好。

答案 1 :(得分:1)

我在VB上非常生疏,但你可能想尝试这样的东西......

Public Class CustomRandomGenerator

    Private Shared myRandom as New Random()

    Public Shared Function GenerateRandomString() As String

        Dim chars = "abcdefghijklmnopqrstuvwxyz0123456789"
        Dim result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())

        Dim rdmpart = "x1y2z3"
        rdm = rdmpart & result

        Return result
    End Function

End Class

“Private Shared myRandom as New Random()”主要是您正在寻找的内容。正如“Chachi”试图解释的那样,你需要只有一个随机生成器。这是因为Random对象是一个在它的“Next()”调用上给出sudo-random值的函数。当您调用Random构造函数时,它使用系统当前时间为其内部函数提供种子值。

根据您正在使用的.Net版本,Random()构造函数将始终以系统时间“0”播种。如果每次运行代码时总是得到相同的结果,那么将“New Random()”部分更改为“New Random(System.DateTime.Now.Ticks)”之类的内容,你应该会很好。 :-)

最后,您将使用“CustomRandomGenerator.GenerateRandomString()”在代码中调用它。我想如果你不熟悉“共享”方法/变量,可能需要提一下。

答案 2 :(得分:0)

我认为您的问题是,每次要生成随机网址时都要创建New Random(),这不是正确使用它的方式(它使用当前时间作为种子,所以如果你的代码运行得足够快,每次都会生成相同的随机数序列。这是一个应该有效的例子:

Sub Main()
    Dim chars = "abcdefghijklmnopqrstuvwxyz0123456789"
    Dim random = New Random()

    For i = 0 To 10
        Dim result = New String(Enumerable.Repeat(chars, 3).[Select](Function(s) s(random.[Next](s.Length))).ToArray())
        Dim rdmpart = "x1y2z3"
        Dim rdm = rdmpart & result

        Dim postData As String = "http://www.xxx.com/......" & rdm & "xxxyyyzzz.htm"
        Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create(postData), HttpWebRequest)
    Next
End Sub