0

我正在做一个 webrequest,需要在每个 url 请求中输入静态 + 随机字符(数字和字母):

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

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


这是解决方案:

终于成功了!这让我发疯了:)根据弗里托的回答,这就是我所做的:

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()”调用是的!

4

3 回答 3

1

试试这个:</p>

随机使用同一时间的种子。

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

对不起,我的英语不好。

于 2012-06-28T12:01:05.193 回答
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()”在代码中调用它。我认为如果您不熟悉“共享”方法/变量,可能需要提及。

于 2012-06-28T12:40:27.473 回答
0

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

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
于 2012-06-28T12:00:33.270 回答