Отправка полезных данных в запросе POST в Vegeta с пользовательским злоумышленником - PullRequest
0 голосов
/ 15 ноября 2018

Итак, я видел несколько постов, в которых говорилось, что вы должны поместить цели во временный файл, а тело в файл .json, но мне нужно отправить много случайных данных на мой сайт, и в идеале я неЯ не хочу постоянно записывать новые случайные данные в эти файлы - поэтому я хотел бы сделать все это в одном файле.Если это просто невозможно, и у меня есть для использования нескольких файлов, пожалуйста, дайте мне знать.

Все, что я сейчас пытаюсь сделать, это отправить запрос POST на веб-страницу, которая простоформа с 4 входами: название, номер, объем и год.У меня есть следующий код, но сейчас он не отправляет значения.Он отправляет полезную нагрузку, но не имеет значений.Это означает, что ключ [] и значение "" сохраняются в моей карте на сервере.Кто-нибудь может увидеть причину, по которой он посылает пробелы?Может кто-нибудь сказать мне, как я должен исправить это?

package main

import (
    "encoding/json"
    "fmt"
    "time"

    vegeta "github.com/tsenart/vegeta/lib"
)

func NewCustomTargeter() vegeta.Targeter {
    return func(tgt *vegeta.Target) error {
        if tgt == nil {
            return vegeta.ErrNilTarget
        }

        tgt.Method = "POST"

        tgt.URL = "http://localhost:8080/create.html"

        payload := map[string]string{
            "title":  "junk",
            "number": "junk2",
            "volume": "junk3",
            "year":   "junk4",
        }
        body, _ := json.Marshal(payload)
        tgt.Body = []byte(body)
        return nil
    }
}

func main() {
    rate := vegeta.Rate{Freq: 100, Per: 2 * time.Second}
    duration := 10 * time.Second
    targeter := NewCustomTargeter()
    attacker := vegeta.NewAttacker()
    var metrics vegeta.Metrics
    for res := range attacker.Attack(targeter, rate, duration, "Load Test") {
        metrics.Add(res)
    }
    metrics.Close()
    fmt.Printf("%+v  \n", metrics)

}

1 Ответ

0 голосов
/ 15 ноября 2018

Вам нужно сделать несколько вещей, чтобы злоумышленник мог отправлять данные в формате FormData.

Сначала установите значение заголовка Content-type на application/x-www-form-urlencoded.Вам может потребоваться импортировать пакет net/http.

header := http.Header{}
header.Set("Content-type", "application/x-www-form-urlencoded")
tgt.Header = header

Затем установите данные в формате url.Values.Передайте его закодированное значение в tgt.Body.Вам также необходимо импортировать пакет net/url.

form := url.Values{}
form.Set("title", "junk")
form.Set("number", "junk2")
form.Set("volume", "junk3")
form.Set("year", "junk4")

tgt.Body = []byte(form.Encode())

Дополнительные примечания

При подготовке данных мы также можем использовать стиль литерала карты.Но поскольку url.Values является псевдонимом map[string][]string (не map[string]string),может потребоваться некоторая корректировка.

form := url.Values{
    "title":  []string{"junk"},
    "number": []string{"junk2"},
    "volume": []string{"junk3"},
    "year":   []string{"junk4"},
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...