我在一个Golang项目中工作,我需要通过外部API执行一些操作:GET,PUT,POST和DELETE。目前正在使用net/http
我创建了一个&http.Client{}
来进行GET和PUT,即按预期工作。从golang消费DELETE端点
现在我需要执行一个DELETE,我找不到任何关于它的东西,它是否支持?我需要基本上调用这样的网址:
somedomain.com/theresource/:id
Method: DELETE
我该如何执行该操作?
我在一个Golang项目中工作,我需要通过外部API执行一些操作:GET,PUT,POST和DELETE。目前正在使用net/http
我创建了一个&http.Client{}
来进行GET和PUT,即按预期工作。从golang消费DELETE端点
现在我需要执行一个DELETE,我找不到任何关于它的东西,它是否支持?我需要基本上调用这样的网址:
somedomain.com/theresource/:id
Method: DELETE
我该如何执行该操作?
这里是如何做到这一点的一个小例子:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func sendRequest() {
// Request (DELETE http://www.example.com/bucket/sample)
// Create client
client := &http.Client{}
// Create request
req, err := http.NewRequest("DELETE", "http://www.example.com/bucket/sample", nil)
if err != nil {
fmt.Println(err)
return
}
// Fetch Request
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
// Read Response Body
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
// Display Results
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
}
我认为这是一个很好的答案,但我会建议(为了帮助OP避免问题的下行)改变几件事情:[关闭响应机构](http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/#anameclose_http_resp_bodyaclosinghttpresponsebody)和[请求完成后关闭连接](http://devs.cloudimmunity.com/陷阱和常见-错误 - 在-GO-golang /#anameclose_http_connaclosinghttpconnections)。有几种情况你不想用同样的功能做这些事情,但我通常需要。 – Jonathan
@Jonathan:其中一些例子不正确,你应该遵循官方文档。是的,你应该总是关闭响应主体,但是_always_先检查错误,然后推迟;在出现错误的情况下,响应对象不保证有效。你通常也不应该关闭请求。 – JimB
@JimB:感谢您的反馈和您的想法。关于官方文档的好处 - 我仔细研究了该页面上的其他一些建议,并认为它们是在1.5之前编写的。当然,一些古老的东西可能会有一些有用的信息块,但当它们不符合当前的官方文档时,并不适合在这种环境中分享。谢谢 – Jonathan
那么,你如何执行'PUT'要求?如何使一个'PUT'请求与创建一个'DELETE'不同? – zerkms
只是一个猜测,但如果你的代码没有收到'DELETE'请求,你可能需要配置CORS(https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)。 CORS做的基本上是发送一个'OPTIONS'请求,要求发送'DELETE'请求的权限。如果您从浏览器发送请求,会发生这种情况。您可以尝试使用'curl'或'postman'等工具来确保发送实际的DELETE请求。另外,如果事实证明是问题所在,你可以使用像Gorilla这样的Go框架来正确处理CORS。 –
@MichałCORS仅适用于客户端发起的请求。 OP从服务器端应用程序执行http请求,因此CORS不适用。 – zerkms