Skip to content

Commit dbb6e3e

Browse files
committed
feat: add headers and request body support
1 parent ac78368 commit dbb6e3e

File tree

5 files changed

+77
-20
lines changed

5 files changed

+77
-20
lines changed

app.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,28 @@ type RequestResult struct {
5858
}
5959

6060
// Greet returns a greeting for the given name
61-
func (a *App) MakeRequest(urlIn string, method string) RequestResult {
61+
func (a *App) MakeRequest(
62+
urlIn string,
63+
method string,
64+
body string,
65+
headers string,
66+
) RequestResult {
6267
result := RequestResult{}
63-
r, err := http.NewRequest(method, urlIn, nil)
68+
rbody := bytes.NewBuffer([]byte(body))
69+
r, err := http.NewRequest(method, urlIn, rbody)
6470
if err != nil {
6571
result.Error = err.Error()
6672
return result
6773
}
74+
75+
reqHeaders := strings.Split(headers, "\n")
76+
for _, h := range reqHeaders {
77+
if h != "" {
78+
hh := strings.Split(h, ":")
79+
r.Header.Add(hh[0], strings.Join(hh[1:], ";"))
80+
}
81+
}
82+
6883
res, httpResp, err := MakeRequest(a.client, r)
6984
if err != nil {
7085
result.Error = err.Error()
@@ -76,8 +91,8 @@ func (a *App) MakeRequest(urlIn string, method string) RequestResult {
7691
vals := strings.Join(v, "; ")
7792
headersArr = append(headersArr, k+": "+vals)
7893
}
79-
result.HeadersStr = strings.Join(headersArr, "\n")
8094

95+
result.HeadersStr = strings.Join(headersArr, "\n")
8196
b := bytes.NewBuffer(make([]byte, 0, len(res)))
8297
err = json.Indent(b, res, "\n", " ")
8398
if err != nil {

frontend/src/App.css

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
.headersp {
77
padding-left: 1em !important;
8-
border: 1px solid #efefef55;
98
padding: 1em !important;
109
}
1110

@@ -14,17 +13,20 @@
1413
padding-right: 1em !important;
1514
text-align: left;
1615
height: auto;
16+
color: var(--mui-palette-primary-dark);
1717
overflow-x: hidden;
1818
overflow-y: auto;
1919
}
2020

2121
.resultp {
22-
border: 1px solid #efefef55;
2322
padding: 1em !important;
2423
}
2524

2625
.result {
2726
text-align: left;
27+
line-height: 0.7em;
28+
font-size: 1em;
29+
color: var(--mui-palette-success-dark);
2830
margin-right: 1em !important;
2931
overflow-y: auto;
3032
}
@@ -44,14 +46,38 @@
4446
margin: 0px auto;
4547
}
4648

47-
.header-div {
49+
.req-header-div,.body-div,.header-div {
4850
margin-top: 1em !important;
49-
color: #82aaff;
5051
font-weight: 1000;
5152
}
5253

54+
5355
.res-div {
5456
margin-top: 1em !important;
55-
color: #82aaff;
5657
font-weight: 1000;
5758
}
59+
60+
.req-body {
61+
width: 100%;
62+
padding: 0.5em !important;
63+
color: var(--mui-palette-primary-dark) !important;
64+
margin: 1em !important;
65+
height: auto;
66+
}
67+
68+
.req-headers {
69+
width: 100%;
70+
padding: 0.5em !important;
71+
color: var(--mui-palette-success-dark) !important;
72+
margin: 1em !important;
73+
height: auto;
74+
}
75+
76+
.error-div {
77+
margin-top: 1em !important;
78+
font-weight: 1000;
79+
}
80+
81+
.error {
82+
color: var(--mui-palette-error-dark);
83+
}

frontend/src/App.tsx

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import Grid from '@mui/material/Unstable_Grid2'; // Grid version 2
88
import MenuItem from '@mui/material/MenuItem'; // Grid version 2
99
import Select from '@mui/material/Select'; // Grid version 2
1010
import { ThemeProvider, createTheme } from '@mui/material/styles';
11+
import {
12+
Experimental_CssVarsProvider as CssVarsProvider,
13+
} from '@mui/material/styles';
1114
import CssBaseline from '@mui/material/CssBaseline';
1215

1316
const darkTheme = createTheme({
@@ -21,6 +24,8 @@ function App() {
2124
const [resultText, setResultText] = useState("");
2225
const [reqMethod, setReqMethod] = useState("GET");
2326
const [errorText, setErrorText] = useState("");
27+
const [reqBody, setReqBody] = useState("");
28+
const [reqHeaders, setReqHeaders] = useState("");
2429
const [resultHeader, setResultHeader] = useState("");
2530
const [url, setURL] = useState('');
2631
const updateURL = (e: any) => setURL(e.target.value);
@@ -31,16 +36,17 @@ function App() {
3136
};
3237

3338
const updateMethod = (e: any) => setReqMethod(e.target.value);
39+
const updateBody = (e:any) => setReqBody(e.target.value)
40+
const updateReqHeaders = (e:any) => setReqHeaders(e.target.value)
3441
function makeRequest() {
35-
MakeRequest(url, reqMethod).then(updateResultText);
42+
MakeRequest(url, reqMethod, reqBody, reqHeaders).then(updateResultText);
3643
}
37-
3844
return (
39-
<ThemeProvider theme={darkTheme}>
45+
<CssVarsProvider>
4046
<CssBaseline />
4147
<Grid container className="App">
4248
<Grid xs={1}>
43-
<Select label="Type" value={reqMethod} variant="standard" onChange={updateMethod}>
49+
<Select label="Type" value={reqMethod} className="url" color="success" variant="standard" onChange={updateMethod}>
4450
<MenuItem value={"GET"}>GET</MenuItem>
4551
<MenuItem value={"POST"}>POST</MenuItem>
4652
<MenuItem value={"PUT"}>PUT</MenuItem>
@@ -52,23 +58,33 @@ function App() {
5258
</Grid>
5359
<Grid xs={1}>
5460
<div id="req-button-p">
55-
<Button className="make-request" variant="outlined" onClick={makeRequest}>Go</Button>
61+
<Button className="make-request" color="primary" variant="contained" onClick={makeRequest}>Go</Button>
5662
</div>
5763
</Grid>
64+
<Grid xs={4} className="req-headers-p">
65+
<Divider textAlign="left" className="req-header-div" color="success"><span>Request Headers</span></Divider>
66+
<TextField id="reqheaders" multiline className="req-headers" variant="filled" rows={10} color="success"
67+
onChange={updateReqHeaders} autoComplete="off" name="reqheaders"/>
68+
</Grid>
69+
<Grid xs={8} className="req-body-p">
70+
<Divider textAlign="left" className="body-div" color="primary"><span>Request Body</span></Divider>
71+
<TextField id="url" multiline className="req-body" variant="filled" rows={10} color="primary"
72+
onChange={updateBody} autoComplete="off" name="reqbody"/>
73+
</Grid>
5874
<Grid xs={4} className="headersp">
5975
<Divider textAlign="left" className="header-div"><span color='#82aaff'>Headers</span></Divider>
6076
<div id="headers" className="headers"><pre>{resultHeader}</pre></div>
6177
</Grid>
6278
<Grid xs={8} className="resultp">
63-
<Divider textAlign="left" className="res-div"><span color='#c3e88d'>Result</span></Divider>
79+
<Divider textAlign="left" className="res-div"><span color='#c3e88d'>Response</span></Divider>
6480
<div id="result" className="result"><pre>{resultText}</pre></div>
6581
</Grid>
6682
<Grid xs={12} className="errorp">
67-
<Divider textAlign="left" className="res-div"><span color='#c3e88d'>Error</span></Divider>
68-
<div id="result" className="result"><pre>{errorText}</pre></div>
83+
<Divider textAlign="left" className="error-div" color="error">Error</Divider>
84+
<div id="error" className="error"><pre>{errorText}</pre></div>
6985
</Grid>
7086
</Grid>
71-
</ThemeProvider>
87+
</CssVarsProvider>
7288
)
7389
}
7490

frontend/wailsjs/go/main/App.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
// This file is automatically generated. DO NOT EDIT
33
import {main} from '../models';
44

5-
export function MakeRequest(arg1:string,arg2:string):Promise<main.RequestResult>;
5+
export function MakeRequest(arg1:string,arg2:string,arg3:string,arg4:string):Promise<main.RequestResult>;

frontend/wailsjs/go/main/App.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
33
// This file is automatically generated. DO NOT EDIT
44

5-
export function MakeRequest(arg1, arg2) {
6-
return window['go']['main']['App']['MakeRequest'](arg1, arg2);
5+
export function MakeRequest(arg1, arg2, arg3, arg4) {
6+
return window['go']['main']['App']['MakeRequest'](arg1, arg2, arg3, arg4);
77
}

0 commit comments

Comments
 (0)