点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
第一种方法:从GET_API_URL获取CSRF令牌字符串。 效果很好。
第二种方法:使用获取的CSRF字符串对POST_API_URL进行POST。
问题是,无论我尝试了什么,它始终会收到403 Forbidden错误。 尝试将第一个响应的cookie(3个cookie-2个安全)存储到Cookie容器中,然后将其传递给第二个请求。 还是没有运气...
在POSTman上尝试了相同的连接,一切正常。 只是不在C#中。
HttpWebRequest req =(HttpWebRequest)WebRequest.Create(" https://mysap_get-api.s4hana.ondemand.com/blablabla"); req.Proxy = null; req.Method =" GET"; req.Headers [" X-CSRF-Token"] ="获取"; req.Headers [" Authorization"] ="基本" + Convert.ToBase64String(Encoding.Default.GetBytes(auth_key)); req.CookieContainer = cookieContainer; HttpWebResponse response = req.GetResponse()as HttpWebResponse; 字符串csrf = response.GetResponseHeader(" x-csrf-token"); 如果(!string.IsNullOrEmpty(csrf)) { 尝试 { HttpWebRequest post_req =(HttpWebRequest)WebRequest.Create(" https://mysap_post-api.s4hana.ondemand.com/blablabla"); post_req.Proxy = null; post_req.Method ="开机自检"; post_req.ContentType =" application/json"; post_req.Headers [" APIKey"] = api_key; post_req.Headers [" X-CSRF-Token"] = csrf; post_req.Headers [" Authorization"] ="基本" + Convert.ToBase64String(Encoding.Default.GetBytes(auth_key)); post_req.Accept =" text/xml"; post_req.CookieContainer = cookieContainer; //也尝试过-没有运气 //foreach(Cookie _cookie在response.cookies中) //{ //cookieContainer.Add(new cookie //{ //名称= _cookie.Name, //值= _cookie.Value, //安全= _cookie.Secure, //域=" mysap_post-api.s4hana.ondemand.com" //}); //} //附加json主体 JavaScriptSerializer js =新的JavaScriptSerializer(); 字符串_hourJson = js.Serialize(_hour); var data = Encoding.ASCII.GetBytes(_hourJson); 使用(var post_reqStream = post_req.GetRequestStream()) { post_reqStream.Write(data,0,data.Length); } //发布第二个请求并检索结果 字符串结果; ***这将继续提供403 !!! *** 使用(WebResponse post_response = post_req.GetResponse()) { 使用(StreamReader rd = new StreamReader(post_response.GetResponseStream())) { 结果= rd.ReadToEnd(); } } } 抓住(前例外) { } } 其他 { Debug.WriteLine("无效的CSRF令牌,作业已终止"); }
Alec-您是否找到了解决方案,因为我遇到的问题完全相同。
一周热门 更多>