mirror of
https://github.com/aykhans/dodo.git
synced 2025-07-03 00:37:26 +00:00
Compare commits
4 Commits
v0.6.1
...
a170588574
Author | SHA1 | Date | |
---|---|---|---|
a170588574 | |||
2a0ac390d8 | |||
11bb8b3fb0 | |||
1aadc3419a |
29
README.md
29
README.md
@ -45,27 +45,10 @@ Download the latest binaries from the [releases](https://github.com/aykhans/dodo
|
||||
|
||||
### Building from Source
|
||||
|
||||
To build Dodo from source, ensure you have [Go 1.24+](https://golang.org/dl/) installed. Then follow these steps:
|
||||
|
||||
1. **Clone the repository:**
|
||||
|
||||
```sh
|
||||
git clone https://github.com/aykhans/dodo.git
|
||||
```
|
||||
|
||||
2. **Navigate to the project directory:**
|
||||
|
||||
```sh
|
||||
cd dodo
|
||||
```
|
||||
|
||||
3. **Build the project:**
|
||||
|
||||
```sh
|
||||
go build -ldflags "-s -w" -o dodo
|
||||
```
|
||||
|
||||
This will generate an executable named `dodo` in the project directory.
|
||||
To build Dodo from source, ensure you have [Go 1.24+](https://golang.org/dl/) installed.
|
||||
```sh
|
||||
go install -ldflags "-s -w" github.com/aykhans/dodo@latest
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
@ -87,10 +70,10 @@ docker run --rm -i aykhans/dodo -u https://example.com -m GET -d 10 -r 1000 -t 2
|
||||
|
||||
### 2. Config File Usage
|
||||
|
||||
#### 2.1 JSON Example
|
||||
|
||||
Send 1000 GET requests to https://example.com with 10 parallel dodos (threads) and a timeout of 800 milliseconds:
|
||||
|
||||
#### 2.1 JSON Example
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"method": "GET",
|
||||
|
@ -45,7 +45,7 @@ Flags:
|
||||
-m, -method string HTTP Method for the request (default %s)
|
||||
-b, -body [string] Body for the request (e.g. "body text")
|
||||
-p, -param [string] Parameter for the request (e.g. "key1=value1")
|
||||
-H, -header [string] Header for the request (e.g. "key1: value1")
|
||||
-H, -header [string] Header for the request (e.g. "key1:value1")
|
||||
-c, -cookie [string] Cookie for the request (e.g. "key1=value1")
|
||||
-x, -proxy [string] Proxy for the request (e.g. "http://proxy.example.com:8080")`
|
||||
|
||||
|
@ -233,4 +233,5 @@ func (config *Config) SetDefaults() {
|
||||
if config.Yes == nil {
|
||||
config.Yes = utils.ToPtr(DefaultYes)
|
||||
}
|
||||
config.Headers.SetIfNotExists("User-Agent", DefaultUserAgent)
|
||||
}
|
||||
|
@ -166,9 +166,6 @@ func setRequestHeaders(req *fasthttp.Request, headers []types.KeyValue[string, s
|
||||
for _, header := range headers {
|
||||
req.Header.Add(header.Key, header.Value)
|
||||
}
|
||||
if req.Header.UserAgent() == nil {
|
||||
req.Header.SetUserAgent(config.DefaultUserAgent)
|
||||
}
|
||||
}
|
||||
|
||||
// setRequestCookies adds the cookies of the given request with the provided key-value pairs.
|
||||
|
@ -73,6 +73,15 @@ func (headers Headers) GetValue(key string) *[]string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (headers Headers) Has(key string) bool {
|
||||
for i := range headers {
|
||||
if headers[i].Key == key {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (headers *Headers) UnmarshalJSON(b []byte) error {
|
||||
var data []map[string]any
|
||||
if err := json.Unmarshal(b, &data); err != nil {
|
||||
@ -137,3 +146,11 @@ func (headers *Headers) Set(value string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (headers *Headers) SetIfNotExists(key string, value string) bool {
|
||||
if headers.Has(key) {
|
||||
return false
|
||||
}
|
||||
*headers = append(*headers, KeyValue[string, []string]{Key: key, Value: []string{value}})
|
||||
return true
|
||||
}
|
||||
|
Reference in New Issue
Block a user