mirror of
https://github.com/aykhans/sarin.git
synced 2026-02-28 06:49:13 +00:00
Add file upload examples and fix templating.md table of contents
This commit is contained in:
@@ -521,7 +521,7 @@ body: '{{ body_FormData "title" "My Document" "document" "@/path/to/file.pdf" }}
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Multiple file uploads:**
|
**Multiple file uploads (same field name):**
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sarin -U http://example.com/api/upload -r 100 -c 10 \
|
sarin -U http://example.com/api/upload -r 100 -c 10 \
|
||||||
@@ -538,10 +538,36 @@ requests: 100
|
|||||||
concurrency: 10
|
concurrency: 10
|
||||||
method: POST
|
method: POST
|
||||||
body: |
|
body: |
|
||||||
{{ body_FormData
|
{{ body_FormData
|
||||||
"files" "@/path/to/file1.pdf"
|
"files" "@/path/to/file1.pdf"
|
||||||
"files" "@/path/to/file2.pdf"
|
"files" "@/path/to/file2.pdf"
|
||||||
}}
|
}}
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**Multiple file uploads (different field names):**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sarin -U http://example.com/api/upload -r 100 -c 10 \
|
||||||
|
-M POST \
|
||||||
|
-B '{{ body_FormData "avatar" "@/path/to/photo.jpg" "resume" "@/path/to/cv.pdf" "cover_letter" "@/path/to/letter.docx" }}'
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>YAML equivalent</summary>
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
url: http://example.com/api/upload
|
||||||
|
requests: 100
|
||||||
|
concurrency: 10
|
||||||
|
method: POST
|
||||||
|
body: |
|
||||||
|
{{ body_FormData
|
||||||
|
"avatar" "@/path/to/photo.jpg"
|
||||||
|
"resume" "@/path/to/cv.pdf"
|
||||||
|
"cover_letter" "@/path/to/letter.docx"
|
||||||
|
}}
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -569,7 +595,7 @@ body: '{{ body_FormData "image" "@https://example.com/photo.jpg" }}'
|
|||||||
|
|
||||||
> **Note:** Files (local and remote) are cached in memory after the first read, so they are not re-read for every request.
|
> **Note:** Files (local and remote) are cached in memory after the first read, so they are not re-read for every request.
|
||||||
|
|
||||||
**Base64 encoded file in JSON body:**
|
**Base64 encoded file in JSON body (local file):**
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sarin -U http://example.com/api/upload -r 100 -c 10 \
|
sarin -U http://example.com/api/upload -r 100 -c 10 \
|
||||||
@@ -587,12 +613,36 @@ requests: 100
|
|||||||
concurrency: 10
|
concurrency: 10
|
||||||
method: POST
|
method: POST
|
||||||
headers:
|
headers:
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
body: '{"file": "{{ file_Base64 "/path/to/file.pdf" }}", "filename": "document.pdf"}'
|
body: '{"file": "{{ file_Base64 "/path/to/file.pdf" }}", "filename": "document.pdf"}'
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
**Base64 encoded file in JSON body (remote URL):**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sarin -U http://example.com/api/upload -r 100 -c 10 \
|
||||||
|
-M POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-B '{"image": "{{ file_Base64 "https://example.com/photo.jpg" }}", "filename": "photo.jpg"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>YAML equivalent</summary>
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
url: http://example.com/api/upload
|
||||||
|
requests: 100
|
||||||
|
concurrency: 10
|
||||||
|
method: POST
|
||||||
|
headers:
|
||||||
|
Content-Type: application/json
|
||||||
|
body: '{"image": "{{ file_Base64 "https://example.com/photo.jpg" }}", "filename": "photo.jpg"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## Using Proxies
|
## Using Proxies
|
||||||
|
|
||||||
**Single HTTP proxy:**
|
**Single HTTP proxy:**
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Sarin supports Go templates in URL paths, methods, bodies, headers, params, cook
|
|||||||
- [String Functions](#string-functions)
|
- [String Functions](#string-functions)
|
||||||
- [Collection Functions](#collection-functions)
|
- [Collection Functions](#collection-functions)
|
||||||
- [Body Functions](#body-functions)
|
- [Body Functions](#body-functions)
|
||||||
|
- [File Functions](#file-functions)
|
||||||
- [Fake Data Functions](#fake-data-functions)
|
- [Fake Data Functions](#fake-data-functions)
|
||||||
- [File](#file)
|
- [File](#file)
|
||||||
- [ID](#id)
|
- [ID](#id)
|
||||||
@@ -110,8 +111,8 @@ sarin -U http://example.com/users \
|
|||||||
|
|
||||||
### Body Functions
|
### Body Functions
|
||||||
|
|
||||||
| Function | Description | Example |
|
| Function | Description | Example |
|
||||||
| ------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------ |
|
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
||||||
| `body_FormData(pairs ...string)` | Create multipart form data from key-value pairs. Automatically sets the `Content-Type` header. Values starting with `@` are treated as file references (local path or URL). Use `@@` to escape literal `@`. | `{{ body_FormData "field1" "value1" "file" "@/path/to/file.pdf" }}` |
|
| `body_FormData(pairs ...string)` | Create multipart form data from key-value pairs. Automatically sets the `Content-Type` header. Values starting with `@` are treated as file references (local path or URL). Use `@@` to escape literal `@`. | `{{ body_FormData "field1" "value1" "file" "@/path/to/file.pdf" }}` |
|
||||||
|
|
||||||
**`body_FormData` Details:**
|
**`body_FormData` Details:**
|
||||||
@@ -150,8 +151,8 @@ body: '{{ body_FormData "twitter" "@@username" }}'
|
|||||||
|
|
||||||
### File Functions
|
### File Functions
|
||||||
|
|
||||||
| Function | Description | Example |
|
| Function | Description | Example |
|
||||||
| --------------------------- | --------------------------------------------------------------------------- | ------------------------------------------ |
|
| ---------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------- |
|
||||||
| `file_Base64(source string)` | Read a file (local path or URL) and return its Base64 encoded content. Files are cached after first read. | `{{ file_Base64 "/path/to/file.pdf" }}` |
|
| `file_Base64(source string)` | Read a file (local path or URL) and return its Base64 encoded content. Files are cached after first read. | `{{ file_Base64 "/path/to/file.pdf" }}` |
|
||||||
|
|
||||||
**`file_Base64` Details:**
|
**`file_Base64` Details:**
|
||||||
|
|||||||
Reference in New Issue
Block a user