Skip to content

Commit

Permalink
- Readme update
Browse files Browse the repository at this point in the history
- Remove unnecessary if/else cases
  • Loading branch information
kursataktas committed Dec 20, 2021
1 parent cd43f41 commit 0a4170b
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 17 deletions.
63 changes: 63 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ The features you can use by config file;
- Scenario creation
- Custom load type creation
- Payload from a file
- Multipart/form-data payload
- Extra connection configuration, like *keep-alive* enable/disable logic
- HTTP2 support

Expand Down Expand Up @@ -253,6 +254,68 @@ There is an example config file at [config_examples/config.json](/config_example

If you need a long payload, we suggest using this parameter instead of `payload`.

- `payload_multipart` *optional*

Use this for `multipart/form-data` Content-Type.

Accepts list of `form-field` object structured as below;
```json
{
"name": [field-name],
"value": [field-value|file-path|url],
"type": <text|file>, // Default "text"
"src": <local|remote> // Default "local"
}
```

**Example:** Sending form name-value pairs;
```json
"payload_multipart": [
{
"name": "[field-name]",
"value": "[field-value]"
}
]
```

**Example:** Sending form name-value pairs and a local file;
```json
"payload_multipart": [
{
"name": "[field-name]",
"value": "[field-value]",
},
{
"name": "[field-name]",
"value": "./test.png",
"type": "file"
}
]
```

**Example:** Sending form name-value pairs and a local file and a remote file;
```json
"payload_multipart": [
{
"name": "[field-name]",
"value": "[field-value]",
},
{
"name": "[field-name]",
"value": "./test.png",
"type": "file"
},
{
"name": "[field-name]",
"value": "http://test.com/test.png",
"type": "file",
"src": "remote"
}
]
```

*Note:* Ddosify adds `Content-Type: multipart/form-data; boundary=[generated-boundary-value]` header to the request when using `payload_multipart`.

- `timeout` *optional*

This is the equivalent of the `-T` flag.
Expand Down
29 changes: 12 additions & 17 deletions config/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,52 +240,47 @@ func prepareMultipartPayload(parts []multipartFormData) (body string, contentTyp
var err error

if strings.EqualFold(part.Type, "file") {

if part.Src == "" || strings.EqualFold(part.Src, "local") {
file, err := os.Open(part.Value)
defer file.Close()
if strings.EqualFold(part.Src, "remote") {
response, err := http.Get(part.Value)
if err != nil {
return "", "", err
}
defer response.Body.Close()

formPart, err := writer.CreateFormFile(part.Name, filepath.Base(file.Name()))
u, _ := url.Parse(part.Value)
formPart, err := writer.CreateFormFile(part.Name, path.Base(u.Path))
if err != nil {
return "", "", err
}

_, err = io.Copy(formPart, file)
_, err = io.Copy(formPart, response.Body)
if err != nil {
return "", "", err
}
} else if strings.EqualFold(part.Src, "remote") {
response, err := http.Get(part.Value)
} else {
file, err := os.Open(part.Value)
defer file.Close()
if err != nil {
return "", "", err
}
defer response.Body.Close()

u, _ := url.Parse(part.Value)
formPart, err := writer.CreateFormFile(part.Name, path.Base(u.Path))
formPart, err := writer.CreateFormFile(part.Name, filepath.Base(file.Name()))
if err != nil {
return "", "", err
}

_, err = io.Copy(formPart, response.Body)
_, err = io.Copy(formPart, file)
if err != nil {
return "", "", err
}
} else {
return "", "", fmt.Errorf("invalid multipart/form-data src: %v", part.Src)
}

} else if strings.EqualFold(part.Type, "text") {
} else {
// If we have to specify Content-Type in Content-Disposition, we should use writer.CreatePart directly.
err = writer.WriteField(part.Name, part.Value)
if err != nil {
return "", "", err
}
} else {
return "", "", fmt.Errorf("invalid multipart/form-data field type:%s", part.Type)
}
}

Expand Down
23 changes: 23 additions & 0 deletions config_examples/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,29 @@
"payload_file": "config_examples/payload.txt",
"timeout": 2,
"sleep": "1000"
},
{
"id": 3,
"url": "https://test_site1.com/endpoint_3",
"method": "POST",
"payload_multipart": [
{
"name": "[field-name]",
"value": "[field-value]"
},
{
"name": "[field-name]",
"value": "./test.png",
"type": "file"
},
{
"name": "[field-name]",
"value": "http://test.com/test.png",
"type": "file",
"src": "remote"
}
],
"timeout": 2
}
]
}

0 comments on commit 0a4170b

Please sign in to comment.