วิธีดำเนินการคำขอ POST เพื่ออัปโหลดไฟล์และข้อมูลใน cURL จากบรรทัดคำสั่ง

ฉันกำลังพยายามส่งคำขอ POST ใน cURL ไปยัง API ในขณะที่ปฏิบัติตามข้อกำหนดที่กำหนด

แนวทาง:

  • ประเภทเนื้อหาที่ส่งควรเป็น application/json

  • ต่อไปนี้เป็นโครงสร้างของร่างกาย:

    • ชื่อ:สตริง

    • หมายเลขโทรศัพท์: สตริง

    • อีเมล์:สตริง

    • ตำแหน่ง: สตริง

    • URL: อาร์เรย์ของออบเจ็กต์ที่มีคุณสมบัติต่อไปนี้

      • ประเภท: สตริง

      • ลิงค์: สตริง

  • ต้องระบุข้อมูลทุกช่อง

  • ต้องมี URL ที่เป็นประเภท "Resume" อย่างน้อยหนึ่งรายการ

  • สำหรับเรซูเม่ เรากำหนดให้การส่งเรซูเม่อยู่ในรูปแบบ 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 Bad Request' แน่นอนว่าฉันกำลังมุ่งเป้าไปที่การตอบสนอง 202

ส่วนใหญ่ฉันเขียนโปรแกรมด้วย Python และ R ดังนั้นการใช้ cURL จึงเป็นเรื่องใหม่สำหรับฉัน ความช่วยเหลือใด ๆ เพื่อให้ฉันสามารถส่งใบสมัครนี้ได้รับการชื่นชมอย่างมาก โปรดแจ้งให้เราทราบหากคุณต้องการข้อมูลอีกต่อไป


person Dre    schedule 28.03.2017    source แหล่งที่มา


คำตอบ (2)


การส่งผ่าน -d หลายรายการทำให้ชิ้นส่วนข้อมูลส่งผ่านเป็นรายการพารามิเตอร์ที่คั่นด้วย & กล่าวคือ -d data1 -d data2 จะส่งผลให้ส่งผ่าน data1&data2 ในส่วนเนื้อหาคำขอ http

คุณต้องส่งสตริง 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

person Dmitry Egorov    schedule 28.03.2017
comment
ขอบคุณสำหรับคำตอบและความคิดเห็นของคุณ ฉันยังคงไม่สามารถส่งคำขอได้สำเร็จ แต่ฉันปิดแล้ว ปัญหาเกิดขึ้นกับ URL ของฉันซึ่งต้องเป็น 'อาร์เรย์ของวัตถุ' คุณรู้วิธีการทำเช่นนี้หรือฉันควรสร้างคำถามอื่นเพื่อพยายามแก้ไขปัญหานี้ - person Dre; 28.03.2017
comment
@Dre: ไม่เป็นไร! ฉันไม่ค่อยเข้าใจสิ่งที่คุณหมายถึงโดย URL ที่เป็น 'อาร์เรย์ของวัตถุ' คุณช่วยอธิบายเรื่องนี้และยกตัวอย่างได้ไหม? - person Dmitry Egorov; 29.03.2017
comment
ฉันได้รับแจ้งว่าสตริง JSON ของฉันค่อนข้างใกล้เคียงกัน ซึ่งถือว่าดี แต่ปัญหาอยู่ที่ข้อกำหนดอาร์เรย์จากหลักเกณฑ์ด้านบน ฉันก็ไม่แน่ใจเหมือนกันว่าอาร์เรย์ของวัตถุหมายถึงอะไร แต่นี่คือสิ่งที่ฉันได้ลอง curl -g -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"Name":"data", "PhoneNumber":"data", "Email":"[email protected]", "Position":"data", "Url":[{"Github":"github.com/data"},{"Resume":"linkedin.com/in/data"}]}' https://envoc-apply-api.azurewebsites.net/api/apply แต่ฉันยังคงได้รับการตอบกลับเนื้อหาคำขอที่ไม่ถูกต้อง ฉันหวังว่านี่จะช่วยได้. - person Dre; 30.03.2017
comment
@Dre: API ระบุฟิลด์อาร์เรย์นั้นเป็น Urls ไม่ใช่ Url คำนึงถึงพหูพจน์ s ในชื่อฟิลด์ - person Dmitry Egorov; 30.03.2017

ลองสิ่งนี้มันได้ผล!

        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 = "[email protected]",
                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");
        }
person Prasanna Mca    schedule 08.09.2017