Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用WebRequest获取Cookie以自动登录Sharepoint Online,从而获取错误信息_C#_Http_Sharepoint 2010_Httpwebrequest - Fatal编程技术网

C# 使用WebRequest获取Cookie以自动登录Sharepoint Online,从而获取错误信息

C# 使用WebRequest获取Cookie以自动登录Sharepoint Online,从而获取错误信息,c#,http,sharepoint-2010,httpwebrequest,C#,Http,Sharepoint 2010,Httpwebrequest,我按照本教程远程验证Sharepoint Online,但我是用C#完成的 我可以毫无问题地从STS获取SAML,但我似乎无法将此令牌发送到Sharepoint以接收回Cookie以便登录。下面是我的代码,请原谅任何明显的错误,我是新手 //Send cookie to SPO. The token is from STS. byte[] spbyteArray = Encoding.UTF8.GetBytes(theToken); WebRequest sp

我按照本教程远程验证Sharepoint Online,但我是用C#完成的

我可以毫无问题地从STS获取SAML,但我似乎无法将此令牌发送到Sharepoint以接收回Cookie以便登录。下面是我的代码,请原谅任何明显的错误,我是新手

 //Send cookie to SPO. The token is from STS.
        byte[] spbyteArray = Encoding.UTF8.GetBytes(theToken);
        WebRequest sprequest = WebRequest.Create("https://login.microsoftonline.com/login.srf?wa=wsignin1.0&rpsnv=2&ct=1335885737&rver=6.1.6206.0&wp=MBI&wreply=https%3A%2F%2Fcamida.sharepoint.com%2F_forms%2Fdefault.aspx&lc=1033&id=500046&cbcxt=mai&wlidp=1&guest=1");
        sprequest.Method = "POST";
        sprequest.ContentLength = spbyteArray.Length;
        sprequest.ContentType = "application/x-www-form-urlencoded";
        sprequest.Headers.GetType().InvokeMember("ChangeInternal", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, sprequest.Headers, new object[] { "Host", "mydomain.sharepoint.com" });
        Stream spdataStream = sprequest.GetRequestStream();
        spdataStream.Write(spbyteArray, 0, spbyteArray.Length);
        spdataStream.Close();

        //Get response from SPO
        WebResponse spresponse = sprequest.GetResponse();
        spdataStream = spresponse.GetResponseStream();
        StreamReader spreader = new StreamReader(spdataStream);

        // Read the content.
        string spresponseFromServer = spreader.ReadToEnd();
如果我在教程中使用URL,我会得到一个403。我使用的URL是我到达时重定向到的URL


非常感谢您提供的任何帮助和建议。

看起来您没有添加任何可能需要的cookies。如果你把你的想法付诸实践,你可以与他人合作。看


另外,我会熟悉一个类似的工具,以便检查您从浏览器发送的请求和响应。这使您能够准确地看到来回发送的内容,以便您可以尝试复制/模拟C#中的请求。

看起来您没有添加任何可能需要的cookie。如果你把你的想法付诸实践,你可以与他人合作。看


另外,我会熟悉一个类似的工具,以便检查您从浏览器发送的请求和响应。这允许您准确地看到来回发送的内容,以便您可以尝试复制/模拟C#中的请求。

从SharePoint请求时,您必须设置用户代理,否则它将在此行返回403

 sprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:12.0) Gecko/20100101 Firefox/12.0";

仅此而已。

从SharePoint请求时,您必须设置用户代理,否则它将在此行返回403

 sprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:12.0) Gecko/20100101 Firefox/12.0";

就这些了。

谢谢赛斯。我用的是Firebug,但我会根据你的建议开始使用Fiddler。我将尝试该转换,将令牌作为cookie添加到sprequest中,稍后再进行注释。再次感谢当从SharePoint请求时,您必须设置用户代理,否则它将在此行返回403;sprequest.UserAgent=“Mozilla/5.0(Windows NT 6.0;rv:12.0)Gecko/20100101 Firefox/12.0”;就这么多了。谢谢你的帮助。8小时结束后我自己来解决。谢谢赛斯。我用的是Firebug,但我会根据你的建议开始使用Fiddler。我将尝试该转换,将令牌作为cookie添加到sprequest中,稍后再进行注释。再次感谢当从SharePoint请求时,您必须设置用户代理,否则它将在此行返回403;sprequest.UserAgent=“Mozilla/5.0(Windows NT 6.0;rv:12.0)Gecko/20100101 Firefox/12.0”;就这么多了。谢谢你的帮助。8个小时结束后我自己来解决。