Как программно войти в систему SharePoint Online и получить веб HTML? - PullRequest
0 голосов
/ 10 февраля 2020

Я использую C# и CSOM и хотел бы достичь цели для сайта SharePoint Online с помощью следующих шагов:

  1. получить list_id по заданному имени списка (этот шаг очень прост с CSOM)

  2. используйте list_id для доступа к странице: https://{domain}.sharepoint.com/_layouts/15/listedit.aspx?List={list_id} (страница настройки списка в соответствии с идентификатором списка)

  3. захватить всю страницу HTML содержимое, затем выполнить некоторые дальнейшие операции GET / POST

Моя проблема: я застрял на шаге 2 и 3, не могу Войдите на сайт SharePoint Online программным способом и сохраните контекст сеанса для дальнейших последовательных операций GET / POST.


  • на самом деле я уже сделал это на нескольких сайтах SharePoint OnPerm успешно, используя var httpClient = new HttpClient(new HttpClientHandler{Credentials = new NetworkCredential(username, password)})

  • , затем используйте эту HttpClient для входа на сайт OnPerm и удерживайте контекст входа для дальнейших запросов GET / POST

Мое намерение использовать SharePoint Online такое же, как указано выше, с указанными string site, string username и SecureString password, чтобы войти на сайт SharePoint Online и выполнить GET / POST программно.


В настоящее время я просто использую SharePointOnlineCredentials для замены NetworkCredential, чтобы получить HttpClient для входа в систему, но только получить ошибки 401 и 502.

1 Ответ

1 голос
/ 11 февраля 2020

Мы можем использовать WebClient для получения страницы HTML в SharePoint. Следующий код для вашей справки.

using System;
using System.Security;
using Microsoft.SharePoint.Client;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string siteUrl = "https://tenant.sharepoint.com";
            string userName = "xxx@tenant.onmicrosoft.com";
            string password = "xxx";
            string listName = "listname";

            var securePassword = new SecureString();
            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }

            var credentials = new SharePointOnlineCredentials(userName, securePassword);
            var ctx = new ClientContext(siteUrl);
            ctx.Credentials = credentials;
            var list = ctx.Web.Lists.GetByTitle(listName);
            ctx.Load(list);
            ctx.ExecuteQuery();

            using (var wc = new System.Net.WebClient())
            {
                wc.Credentials = credentials;
                wc.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
                wc.Headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC)";
                var pageHtml = wc.DownloadString(siteUrl + "/_layouts/15/listedit.aspx?List={" + list.Id.ToString() + "}");
                Console.WriteLine(pageHtml);
            }          
            Console.ReadKey();
        }
    }
}
...