登录
首页 >  Golang >  Go问答

POST请求提交后仍需再次请求权限

来源:stackoverflow

时间:2024-03-25 21:36:39 315浏览 收藏

本文讨论了在使用两个 POST 请求时出现的权限问题,其中一个用于登录,另一个用于创建产品。由于并发问题,第二个请求无法访问登录请求建立的权限。作者尝试使用通道和时间包解决问题,但没有成功。文章指出,解决方法是发送 cookie 或授权标头,而不是使用通道。

问题内容

我正在尝试向指定的 url(网页)发送两个 postform 请求,其中一个是“登录”,另一个是“创建产品”。问题是第二个请求(创建产品)与第一个请求(登录)分开。这就是为什么虽然登录成功,但服务器向我发送权限错误(“您必须先登录才能创建产品。”)

我想,这是因为并发的原因,所以我也使用了通道甚至时间包,但它们都不起作用。有什么解决办法吗?

func login(c chan string) {
    resp, _ := http.PostForm("http://example.com/login",
        url.Values{"username": {"sth"}, "password": {"sth"}})
    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    time.Sleep(5000 * time.Millisecond)
    fmt.Printf("%v", string(body), "\n")
    c <- string(body)
}

func CreateProduct() {
    resp, _ := http.PostForm("http://example.com/product",
        url.Values{"name": {"sth"}})
    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Printf("%v", string(body), "\n")
}

func main() {
    c := make(chan string)
    go login(c)
    str := <-c
    if str != "" {
        CreateProduct()
    }
}

解决方案


您不需要也不想要为此使用频道。

您需要发送 cookie 或授权标头。检查您尝试使用的服务的文档中提到了身份验证。

如果您指定哪些服务人员可能能够提供更多帮助,但作为一般准则 - 如果是 api,它可能需要令牌,如果是网页,它可能需要 cookie,但要注意,您可能还需要绕过在这种情况下进行 csrf 保护。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>