C# 我应该设置哪些cookie/header?

C# 我应该设置哪些cookie/header?,c#,cookies,header,http-headers,C#,Cookies,Header,Http Headers,我应该从外部站点获得一个受保护的页面,如果我直接调用它,我会得到一个错误: 错误的请求 邮递员: 但如果我通过邮递员调用具有有效凭据的登录页面: 然后从同一个邮递员那里调出同一个资源页面,我得到了受保护的页面!: 我必须在网站上得到相同的页面。我尝试通过以下方式实现它: var loginXml = "<Request><MsgType>Authenticate</MsgType><SubMsgType>Login</

我应该从外部站点获得一个受保护的页面,如果我直接调用它,我会得到一个错误:

错误的请求

邮递员:

但如果我通过邮递员调用具有有效凭据的登录页面:

然后从同一个邮递员那里调出同一个资源页面,我得到了受保护的页面!:

我必须在网站上得到相同的页面。我尝试通过以下方式实现它:

            var loginXml = "<Request><MsgType>Authenticate</MsgType><SubMsgType>Login</SubMsgType><UserID>my_login</UserID><passwordNotEncrypted>my_password</passwordNotEncrypted></Request>";
            $.ajax(
                {
                    url: 'https://address/browserservices.aspx/login',
                    type: 'POST',
                    contentType: 'text/xml',
                    datatype: 'text',
                    //xhrFields: {
                    //    withCredentials: true
                    //},
                    //crossDomain: true,
                    data: loginXml,
                    success: function (output, status, xhr) {
                        alert(xhr.getResponseHeader("Set-Cookie"));
                        $.ajax({
                            url: "https://address/RemoteSupport.aspx?id=GUID&pltFrmType=Android&agentversion=13.46",
                            type: 'GET',
                            xhrFields: { withCredentials: true },
                            //crossDomain: true,
                            success: function (x) { },
                            error: function (xhr, textStatus) { alert(xhr.status); }
                        });
                    },
                })
但我又收到了一个不好的请求。 我应该将哪些标题/cookies传递到页面以打开受保护的页面,就像在邮递员中一样

19年1月28日增补 成功登录请求失败后的邮递员Cookie选项卡登录请求具有相同的内容:

和标题选项卡:


如我所见,所有访问控制允许标头都可用。我应该通过ajax传递什么?

根据您提供的信息,有两种可能的情况

首先,外部站点设置的cookie是HttpOnly。点击Cookies标签,这很容易让邮递员登记

第二个选项稍微复杂一些,但是外部服务器必须正确设置访问控制头。还有一个标题选项卡可以查看这些内容。有关此问题中跨域ajax和标题的更多信息:

最后值得注意的是,您的浏览器将自动添加一个标头,以指示这是一个ajax请求。您可以尝试在Postman中添加X-request-With:XMLHttpRequest头,看看它与您的示例有何不同。外部服务器可以很好地配置为以不同于浏览器或服务器api请求的方式响应ajax请求

更新 您的邮递员更新显示这两种情况都是正确的。不幸的是,这意味着您无法使用JavaScript实现期望的结果。HttpOnly=true意味着浏览器永远不会允许页面上的脚本访问cookie

此时,您最好在自己的站点上编写一个代理方法,将请求服务器发送到服务器,然后将结果返回到JavaScript代码。这应该绕过所有上述问题,尽管您需要对数据发出2个请求,而不是1个请求

看看这个答案,了解一些代码


邮递员很可能会在会话中存储一些东西,允许您登录。通常,要通过应用程序进行身份验证,您会到达一个端点,并返回类似令牌的内容,该令牌可以与下一个端点一起发送request@MikeS我理解,但如何实施?你需要提供更多信息。比如你在哪里运行它。。。因为如果您试图在普通浏览器上运行它,它很可能会失败,因为跨域请求在大多数情况下都会返回错误。@GramThanos我没有更多信息。它适用于邮递员,但如果邮递员正在保存任何Cookie,我就不能用于webCheck。也许,登录后,你会得到一些cookie,邮递员会为你存储这些cookie。如果发生这种情况,您应该在代码中实现这个流。我在ajax调用中添加了标题:{X-request-With:XMLHttpRequest},没有任何变化谢谢,它帮助了我!现在我需要解决下一个问题,与之相关。你能看看吗?