0

知道如何从 c# 将文件上传到 Google 网站吗?

我正在尝试上传但收到 403 错误。但是,我使用相同的凭据连接到该站点并获取该站点上存在的附件和页面列表。

任何帮助将不胜感激!!

4

2 回答 2

1

他们很可能有一个反CSRF方案,该方案将时间标识符存储在页面和/或 cookie 中,这是专门用来阻止机器人的。您很可能在没有正确的 CSRF 令牌的情况下提交请求并被拒绝。我建议分析他们如何处理 CSRF,在这一点之后,它很可能归结为向页面发出 WebRequest,因此您可以获得他们返回的任何 cookie,以及拥有表单以便您可以刮掉任何隐藏的字段是相关的。然后将它们移到您尝试将文件发送到的发布请求中。

于 2011-05-04T18:27:21.043 回答
0

我发现了问题并解决了它。下面是完整的功能:

public bool UploadAttachment()
    {
        try
        {
            //AsyncSendData data = new AsyncSendData();

            string parentUrl = Cabinets["Cabinet1"].ToString();
            string parentID = parentUrl.Split('/')[7];

            AtomEntry entry = new AtomEntry();
            entry.Title.Text = "abc.jpg";

            AtomCategory cat = new AtomCategory();
            cat.Term = ATTACHMENT_TERM;
            cat.Label = "attachment";
            cat.Scheme = KIND_SCHEME;
            entry.Categories.Add(cat);

            AtomLink link = new AtomLink();
            link.Rel = PARENT_REL;
            link.HRef = parentUrl;
            entry.Links.Add(link);

            AtomContent content = new AtomContent();
            FileInfo info = new FileInfo("C:\\Bluehills.txt");
            FileStream stream = info.Open(FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite);

            this.setUserCredentials(userName, password);
            Uri postUri = new Uri(makeFeedUri("content"));

            entry.Source = new AtomSource();
            //this.EntrySend(postUri, entry, GDataRequestType.Insert);
            // Send the request and receive the response:
            AtomEntry insertedEntry = this.Insert(postUri, stream, (string)DocumentTypes["TXT"], "bluehills");

            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
于 2011-06-29T04:37:19.960 回答