【问题标题】:Using WebRequest in place of curl command使用 WebRequest 代替 curl 命令
【发布时间】:2013-03-14 07:49:43
【问题描述】:

我正在处理一个需要使用 curl 命令将文件加载到特定站点的项目。我希望使用 C# 来实现这一点。通过查看关于 SO 的类似问题,我没有发现任何似乎对我有用的东西,除非我做错了。

这是我在 Cygwin 中成功使用的 curl 命令:

curl -i -u user:password -F 'file1=@\Users\User\Desktop\test.jpg' -F 'json={"content": {"type": "text/html", "text": "<body><p>look at me, look at me</p></body>"}, "type": "document", "subject": "Document with Attachment"};type=application/json' http://someurl

现在我正在尝试使用 WebRequest 来完成这项工作,因为我已经读到这在其他帖子中是可能的。这就是我目前所拥有的。

 WebRequest request = WebRequest.Create("http://someurl");
            request.PreAuthenticate = true;
            request.ContentType = "application/json";
            request.Method = "POST";
            string authInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes("user:password"));
            request.Headers["Authorization"] = "Basic " + authInfo;

            //what do I set my buffer to?

            Stream reqstr = request.GetRequestStream();
            reqstr.Write(buffer, 0, buffer.Length);
            reqstr.Close();

            WebResponse response = request.GetResponse();

我应该在此处设置什么缓冲区来编写 curl 命令,该命令又应该发送文件 test.jpg?另外,我尝试使用 libcurl 也没有成功。任何指向正确方向的指针都非常感谢!

【问题讨论】:

  • 你必须写一个multipart/form-data类型的内容(curl发送2字段的-F参数,一个json和一个文件)。这里是一个例子:stackoverflow.com/a/3890955/209727
  • 转储所有的认证资料。 request.Credentials = new NetworkCredential(user,pass);

标签: c# curl


【解决方案1】:

您可以先 POST json 文档描述,然后使用第二个请求 PUT 文件内容, 或使用 multipart/form-data 使用单个 POST 上传两者。

这篇文章有很好的例子:How do I add/create/insert files to Google Drive through the API?

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 2012-09-03
    • 2019-01-02
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多