user_agent.go 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package gofakeit
  2. import "strconv"
  3. // UserAgent will generate a random broswer user agent
  4. func UserAgent() string {
  5. randNum := randIntRange(0, 4)
  6. switch randNum {
  7. case 0:
  8. return ChromeUserAgent()
  9. case 1:
  10. return FirefoxUserAgent()
  11. case 2:
  12. return SafariUserAgent()
  13. case 3:
  14. return OperaUserAgent()
  15. default:
  16. return ChromeUserAgent()
  17. }
  18. }
  19. // ChromeUserAgent will generate a random chrome browser user agent string
  20. func ChromeUserAgent() string {
  21. randNum1 := strconv.Itoa(randIntRange(531, 536)) + strconv.Itoa(randIntRange(0, 2))
  22. randNum2 := strconv.Itoa(randIntRange(36, 40))
  23. randNum3 := strconv.Itoa(randIntRange(800, 899))
  24. return "Mozilla/5.0 " + "(" + randomPlatform() + ") AppleWebKit/" + randNum1 + " (KHTML, like Gecko) Chrome/" + randNum2 + ".0." + randNum3 + ".0 Mobile Safari/" + randNum1
  25. }
  26. // FirefoxUserAgent will generate a random firefox broswer user agent string
  27. func FirefoxUserAgent() string {
  28. ver := "Gecko/" + Date().Format("2006-02-01") + " Firefox/" + strconv.Itoa(randIntRange(35, 37)) + ".0"
  29. platforms := []string{
  30. "(" + windowsPlatformToken() + "; " + "en-US" + "; rv:1.9." + strconv.Itoa(randIntRange(0, 3)) + ".20) " + ver,
  31. "(" + linuxPlatformToken() + "; rv:" + strconv.Itoa(randIntRange(5, 8)) + ".0) " + ver,
  32. "(" + macPlatformToken() + " rv:" + strconv.Itoa(randIntRange(2, 7)) + ".0) " + ver,
  33. }
  34. return "Mozilla/5.0 " + RandString(platforms)
  35. }
  36. // SafariUserAgent will generate a random safari browser user agent string
  37. func SafariUserAgent() string {
  38. randNum := strconv.Itoa(randIntRange(531, 536)) + "." + strconv.Itoa(randIntRange(1, 51)) + "." + strconv.Itoa(randIntRange(1, 8))
  39. ver := strconv.Itoa(randIntRange(4, 6)) + "." + strconv.Itoa(randIntRange(0, 2))
  40. mobileDevices := []string{
  41. "iPhone; CPU iPhone OS",
  42. "iPad; CPU OS",
  43. }
  44. platforms := []string{
  45. "(Windows; U; " + windowsPlatformToken() + ") AppleWebKit/" + randNum + " (KHTML, like Gecko) Version/" + ver + " Safari/" + randNum,
  46. "(" + macPlatformToken() + " rv:" + strconv.Itoa(randIntRange(4, 7)) + ".0; en-US) AppleWebKit/" + randNum + " (KHTML, like Gecko) Version/" + ver + " Safari/" + randNum,
  47. "(" + RandString(mobileDevices) + " " + strconv.Itoa(randIntRange(7, 9)) + "_" + strconv.Itoa(randIntRange(0, 3)) + "_" + strconv.Itoa(randIntRange(1, 3)) + " like Mac OS X; " + "en-US" + ") AppleWebKit/" + randNum + " (KHTML, like Gecko) Version/" + strconv.Itoa(randIntRange(3, 5)) + ".0.5 Mobile/8B" + strconv.Itoa(randIntRange(111, 120)) + " Safari/6" + randNum,
  48. }
  49. return "Mozilla/5.0 " + RandString(platforms)
  50. }
  51. // OperaUserAgent will generate a random opera browser user agent string
  52. func OperaUserAgent() string {
  53. platform := "(" + randomPlatform() + "; en-US) Presto/2." + strconv.Itoa(randIntRange(8, 13)) + "." + strconv.Itoa(randIntRange(160, 355)) + " Version/" + strconv.Itoa(randIntRange(10, 13)) + ".00"
  54. return "Opera/" + strconv.Itoa(randIntRange(8, 10)) + "." + strconv.Itoa(randIntRange(10, 99)) + " " + platform
  55. }
  56. // linuxPlatformToken will generate a random linux platform
  57. func linuxPlatformToken() string {
  58. return "X11; Linux " + getRandValue([]string{"computer", "linux_processor"})
  59. }
  60. // macPlatformToken will generate a random mac platform
  61. func macPlatformToken() string {
  62. return "Macintosh; " + getRandValue([]string{"computer", "mac_processor"}) + " Mac OS X 10_" + strconv.Itoa(randIntRange(5, 9)) + "_" + strconv.Itoa(randIntRange(0, 10))
  63. }
  64. // windowsPlatformToken will generate a random windows platform
  65. func windowsPlatformToken() string {
  66. return getRandValue([]string{"computer", "windows_platform"})
  67. }
  68. // randomPlatform will generate a random platform
  69. func randomPlatform() string {
  70. platforms := []string{
  71. linuxPlatformToken(),
  72. macPlatformToken(),
  73. windowsPlatformToken(),
  74. }
  75. return RandString(platforms)
  76. }