【问题标题】:Webclient equivalent of CURL commandWebclient 等效于 CURL 命令
【发布时间】:2015-02-27 16:21:59
【问题描述】:

我正在尝试通过 POST 将文件上传到 c# winform 中的 REST API。

如果我使用 curl 运行以下命令,则文件上传成功:

curl.exe -H "Content-type: application/octet-stream" -X POST http://myapiurl --data-binary @C:\test.docx

我尝试在我的 WinForm 中使用 WebClient:

using (var client = new WebClient())
            {
                client.Headers.Add("Content-Type", "application/octet-stream");

                byte[] result = client.UploadFile(url, file);
                string responseAsString = Encoding.Default.GetString(result);
                tb_result.Text += responseAsString;
            } 

但我只得到一个 (500) 内部服务器。

用提琴手检查这个,用 CURL 添加以下标题:

POST http://myapiurl HTTP/1.1
User-Agent: curl/7.33.0
Host: 10.52.130.121:90
Accept: */*
Connection: Keep-Alive
Content-type: application/octet-stream
Content-Length: 13343
Expect: 100-continue

但检查我的 WebClient 方法会显示以下内容:

POST http://myapiurl HTTP/1.1
Accept: */*
Content-Type: multipart/form-data; boundary=---------------------8d220bbd95f8b18
Host: 10.52.130.121:90
Content-Length: 13536
Expect: 100-continue
Connection: Keep-Alive

如何在我的应用中模拟上面的 CURL 命令?

【问题讨论】:

    标签: c# winforms curl webclient


    【解决方案1】:

    如何在我的应用中模拟上面的 CURL 命令?

    使用HttpWebRequest。它为您提供更大的灵活性。如下:

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myapiurl");
    request.Method = "POST";
    request.UserAgent = "curl/7.33.0";
    request.Host = "10.52.130.121:90";
    request.Accept = "Accept=*/*";
    request.Connection = "Keep-Alive";
    request.ContentType = "application/octet-stream";
    request.ContentLength = 13343;
    request.Expect = "100-continue";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2019-11-10
      • 2013-08-30
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      相关资源
      最近更新 更多