【问题标题】:How to do a POST request to upload a file and data in cURL from the command line如何执行 POST 请求以从命令行上传 cURL 中的文件和数据
【发布时间】:2017-03-28 06:08:28
【问题描述】:

我正在尝试在遵循给定要求的同时以 cURL 向 API 发送 POST 请求。

指南:

  • 提交的内容类型应为application/json

  • 以下是正文的结构:

    • 名称:字符串

    • 电话号码:字符串

    • 电子邮件:字符串

    • 位置:字符串

    • Urls:包含以下属性的对象数组

      • 类型:字符串

      • 链接:字符串

  • 所有字段均为必填项

  • 至少需要一个“简历”类型的网址

  • 对于简历,我们要求提交的内容为 PDF 格式

  • 如果您的提交成功,您将收到 HTTP 202 响应

我相信我有正确的语法来处理我想以 JSON 格式发送的所有数据,但我不确定如何在同一个请求中上传 PDF。

这是我目前的语法。

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -
     X POST -d '{"json":{"Name":"data"}}' -d '{"json":
     {"PhoneNumber":"data"}}' -d '{"json":{"Email":"data"}}' -d '{"json":
     {"Position":"data"}}' https://example

当我在命令行中输入这个时,我得到一个“HTTP 400 错误请求”响应,当然我正在拍摄一个 202 响应。

我主要使用 Python 和 R 编程,所以使用 cURL 对我来说是新的。非常感谢任何帮助我发送此应用程序。如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: json curl post file-upload http-post


    【解决方案1】:

    传递多个-d 会使数据片段作为由& 分隔的参数列表传递,即-d data1 -d data2 将导致在http 请求正文中传递data1&data2

    您需要一次性传递整个 JSON 字符串:

    curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST
        -d '{"Name":"data", "PhoneNumber":"data", "Email":"data", "Position":"data"}'
        https://example
    

    注意注意在"Content-Type: application/json 之后关闭"

    【讨论】:

    • 感谢您的回答和评论。我仍然无法成功发送请求,但我很接近。问题在于我的 URL,它需要是“对象数组”。你知道怎么做吗?或者我应该创建另一个问题来尝试解决这个问题?
    • @Dre:不客气!我不太明白 URL 是“对象数组”是什么意思。能否请您澄清一下并举例说明?
    • 有人告诉我我的 JSON 字符串非常接近,这很好,但问题在于上述指南中的数组要求。我也不确定“对象数组”是什么意思,但这是我尝试过的。 curl -g -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"Name":"data", "PhoneNumber":"data", "Email":"data@gmail.com", "Position":"data", "Url":[{"Github":"github.com/data"},{"Resume":"linkedin.com/in/data"}]}' https://envoc-apply-api.azurewebsites.net/api/apply 但我仍然收到无效的请求正文响应。我希望这会有所帮助。
    • @Dre:API 指定数组字段为Urls,而不是Url。注意字段名称中的复数 s
    【解决方案2】:

    试试这个吧!

            try{
    
                var httpclient = new HttpClient();
                Urls[] url = new Urls[]
                {
                    new Urls("Resume", "https://my.pcloud.com/publink/show?code=XZV0YvZyqR708s0VNkTCMigM8AvdyEhE59y")
    
                    };
                var envocdata = new envoc_data
                {
                    Name = "Prasanna",
                    PhoneNumber = "data",
                    Email = "prasannadata@gmail.com",
                    Position = "Xamarin Developer",
                    Urls = url
    
                };
                var json = JsonConvert.SerializeObject(envocdata);
                HttpContent httpcontent = new StringContent(json);
                httpcontent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                var result = await httpclient.PostAsync("http://envoc-apply-api.azurewebsites.net/api/apply", httpcontent);
    
            }
            catch (Exception ex)
            {
                DisplayAlert("", ""+ex.Message, "Ok");
            }
    

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 2015-01-02
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多