Bagaimana melakukan permintaan POST untuk mengunggah file dan data di cURL dari baris perintah

Saya mencoba mengirim Permintaan POST di cURL ke API sambil mengikuti persyaratan yang diberikan.

Pedoman:

  • Tipe konten untuk pengiriman harus application/json

  • Berikut struktur tubuhnya:

    • Nama: Tali

    • Nomor Telepon: String

    • Surel: Tali

    • Posisi: Tali

    • Url: Array objek yang berisi properti berikut

      • Jenis: Tali

      • Tautan: Tali

  • Semua bidang yang diperlukan

  • Setidaknya satu URL dengan jenis "Lanjutkan" diperlukan

  • Untuk resume, kami mengharuskan pengiriman dalam format PDF

  • Jika pengiriman Anda berhasil, Anda akan menerima respons HTTP 202

Saya yakin saya memiliki sintaks yang tepat untuk semua data yang ingin saya kirim dalam JSON tetapi saya tidak yakin bagaimana cara mengunggah PDF dalam permintaan yang sama.

Inilah sintaksis saya sejauh ini.

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

Ketika saya memasukkan ini ke baris perintah, saya mendapat respons 'Permintaan Buruk HTTP 400' ketika tentu saja saya mencari respons 202.

Saya kebanyakan memprogram dengan Python dan R jadi menggunakan cURL adalah hal baru bagi saya. Bantuan apa pun sehingga saya dapat mengirimkan aplikasi ini sangat dihargai. Tolong beri tahu saya jika Anda memerlukan informasi lagi.


person Dre    schedule 28.03.2017    source sumber


Jawaban (2)


Melewati beberapa -d membuat potongan data diteruskan sebagai daftar parameter yang dibatasi oleh &, yaitu -d data1 -d data2 akan menghasilkan penerusan data1&data2 di badan permintaan http.

Anda harus meneruskan seluruh string JSON sekaligus:

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

Catatan Perhatikan penutupan " setelah "Content-Type: application/json.

person Dmitry Egorov    schedule 28.03.2017
comment
Terima kasih atas jawaban dan komentar Anda. Saya masih belum berhasil mengirimkan permintaan tersebut, namun saya sudah hampir melakukannya. Masalahnya adalah dengan URL saya, itu harus berupa 'array objek'. Apakah Anda tahu cara melakukan ini atau haruskah saya membuat pertanyaan lain untuk mencoba menyelesaikannya? - person Dre; 28.03.2017
comment
@Dre: Sama-sama! Saya tidak begitu mengerti apa yang Anda maksud dengan URL sebagai 'array objek'. Bisakah Anda menjelaskan hal ini dan memberikan contoh? - person Dmitry Egorov; 29.03.2017
comment
Saya diberi tahu bahwa string JSON saya cukup mirip, dan itu bagus, tetapi masalahnya ada pada persyaratan array dari pedoman di atas. Saya juga tidak yakin apa arti array objek tetapi inilah yang saya coba. 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 namun saya masih menerima respons isi permintaan yang tidak valid. Semoga membantu. - person Dre; 30.03.2017
comment
@Dre: API menetapkan bidang array itu menjadi Urls, bukan Url. Perhatikan bentuk jamak s pada nama field. - person Dmitry Egorov; 30.03.2017

Coba ini berhasil!

        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