MCPcopy Create free account
hub / github.com/cloudflare/cfssl / post

Method post

api/client/client.go:134–186  ·  view source on GitHub ↗

post connects to the remote server and returns a Response struct

(url string, jsonData []byte)

Source from the content-addressed store, hash-verified

132
133// post connects to the remote server and returns a Response struct
134func (srv *server) post(url string, jsonData []byte) (*api.Response, error) {
135 var resp *http.Response
136 var err error
137 client := &http.Client{}
138 if srv.TLSConfig != nil {
139 client.Transport = srv.createTransport()
140 }
141 if srv.RequestTimeout != 0 {
142 client.Timeout = srv.RequestTimeout
143 }
144 req, err := http.NewRequest("POST", url, bytes.NewReader(jsonData))
145 if err != nil {
146 err = fmt.Errorf("failed POST to %s: %v", url, err)
147 return nil, errors.Wrap(errors.APIClientError, errors.ClientHTTPError, err)
148 }
149 req.Close = true
150 req.Header.Set("content-type", "application/json")
151 if srv.reqModifier != nil {
152 srv.reqModifier(req, jsonData)
153 }
154 resp, err = client.Do(req)
155 if err != nil {
156 err = fmt.Errorf("failed POST to %s: %v", url, err)
157 return nil, errors.Wrap(errors.APIClientError, errors.ClientHTTPError, err)
158 }
159 defer req.Body.Close()
160 defer resp.Body.Close()
161 body, err := io.ReadAll(resp.Body)
162 if err != nil {
163 return nil, errors.Wrap(errors.APIClientError, errors.IOError, err)
164 }
165
166 if resp.StatusCode != http.StatusOK {
167 log.Errorf("http error with %s", url)
168 return nil, errors.Wrap(errors.APIClientError, errors.ClientHTTPError, stderr.New(string(body)))
169 }
170
171 var response api.Response
172 err = json.Unmarshal(body, &response)
173 if err != nil {
174 log.Debug("Unable to parse response body:", string(body))
175 return nil, errors.Wrap(errors.APIClientError, errors.JSONError, err)
176 }
177
178 if !response.Success || response.Result == nil {
179 if len(response.Errors) > 0 {
180 return nil, errors.Wrap(errors.APIClientError, errors.ServerRequestFailed, stderr.New(response.Errors[0].Message))
181 }
182 return nil, errors.New(errors.APIClientError, errors.ServerRequestFailed)
183 }
184
185 return &response, nil
186}
187
188// AuthSign fills out an authenticated signing request to the server,
189// receiving a certificate or error in response.

Callers 2

authReqMethod · 0.95
getResultMapMethod · 0.95

Calls 7

createTransportMethod · 0.95
WrapFunction · 0.92
ErrorfFunction · 0.92
DebugFunction · 0.92
NewFunction · 0.92
NewMethod · 0.80
CloseMethod · 0.45

Tested by

no test coverage detected