首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Post操作失败,并显示"CSRF令牌验证失败“错误

Post操作失败,并显示"CSRF令牌验证失败“错误
EN

Stack Overflow用户
提问于 2018-10-07 18:29:56
回答 2查看 8.5K关注 0票数 0

我正在尝试在SAP Hybris C4C实体上执行POST操作。

我遇到过许多博客,其中提到我们需要在POST期间发送X-CSRF-Token,这可以首先使用GET操作来检索。

我使用Postman成功地做到了这一点。由于Postman存储的cookie不会导致CSRF令牌验证失败。

但是,我实际上想使用golang来调用它。我每次都会收到"CSRF令牌验证失败“这样的错误。然后,在阅读了许多博客之后,我发现我们不仅要设置X-CSRF-Token,还要设置Cookie,这样HTTP POST就不会被视为新会话。否则,我们发送的csrf令牌与当前会话不匹配,导致错误。

即使在遵循上述两条线索后,我仍然收到错误。下面是代码片段,我不确定还遗漏了什么。

代码片段:

代码语言:javascript
复制
auth := "******:*****"
basicAuth := base64.StdEncoding.EncodeToString([]byte(auth))

geturl := "https://******.crm.ondemand.com/sap/c4c/odata/v1/c4codataapi"
req, _ := http.NewRequest("GET", geturl, nil)
req.Header.Set("Authorization", "Basic "+basicAuth)
req.Header.Set("X-Csrf-Token", "Fetch")
cli := &http.Client{}
res, _ := cli.Do(req)

inputMap := make(map[string]interface{})
inputMap["PriorityCodeText"] = "Normal"
inputJSON, _ := json.Marshal(inputMap)

url := "https://*******.crm.ondemand.com/sap/c4c/odata/v1/c4codataapi/OpportunityCollection"
request, _ := http.NewRequest("POST", url, bytes.NewBuffer(inputJSON))
request.Header.Set("Authorization", "Basic "+basicAuth)
request.Header.Set("X-Csrf-Token", res.Header.Get("X-Csrf-Token"))
request.Header.Set("Cookie", res.Header.Get("Set-Cookie"))
request.Header.Set("X-Requested-With", "XMLHttpRequest")
request.Header.Set("Content-Type", "application/atomsvc+xml")
request.Header.Set("DataServiceVersion", "2.0")
//request.Header.Set("Accept", "application/atom+xml")
client := &http.Client{}
resp, _ := client.Do(request)
fmt.Printf("Response status code is: %d", resp.StatusCode)
jsonResponseData, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("Response is: %s", jsonResponseData)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 01:34:05

啊,真灵!正如@gp所提到的,我必须复制所有的cookie,而不仅仅是设置头。我在代码片段中做了以下更改

代码语言:javascript
复制
//request.Header.Set("Cookie", res.Header.Get("Set-Cookie"))
for i := 0; i < len(res.Cookies()); i++ {
    request.AddCookie(res.Cookies()[i])
}
票数 0
EN

Stack Overflow用户

发布于 2021-01-12 15:56:35

我有时会在tomcat9中遇到这个问题,在我的例子中,只需注销并重新登录就可以解决问题。

似乎java应用程序使用的是过期的cookie,但并没有错误地将我重定向到注销页面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52687618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档