একটি @ ফাইল ব্যবহার না করে কার্ল করতে বাইনারি ডেটা পাস করা


31

ফাইলের নাম না দিয়ে কার্ল এবং বাইনারি ডেটা পোস্ট করা কি সম্ভব? উদাহরণস্বরূপ, আপনি --data-বাইনারি মাধ্যমে বাইনারি ব্যবহার করে একটি ফর্ম পোস্ট করতে পারেন:

curl -X POST --data-binary @myfile.bin http://foo.com

তবে এটির জন্য একটি ফাইল উপস্থিত থাকা প্রয়োজন। আমি অনুরোধটি পুনরুত্পাদন করতে কার্ল কমান্ডের পাঠ্য হিসাবে এইচটিটিপি কলগুলি (যেমন বিশ্রাম পরিষেবাদি হিসাবে) লগ করতে সক্ষম হবেন বলে আশা করছিলাম। (উদাহরণস্বরূপ, এটি এই পরিষেবাগুলি ডিবাগ করতে ব্যাপকভাবে সহায়তা করে)

তবে লগিং কার্ল আদেশ দেয় যে কোনও ফাইল রেফারেন্স কার্যকর হবে না, তাই আমি আশা করছিলাম যে আমি আসলে কাঁচা বাইনারি ডেটা লগ করতে পারি, সম্ভবত বেসড 64 এনকোডড এবং তবুও আপনাকে লগল কার্ল কমান্ডটি অনুলিপি করে আটকানোর অনুমতি দিয়েছি এবং এটি সম্পাদন করতে পারি।

সুতরাং, কোনও ফাইল উল্লেখ না করে কার্ল এবং বাইনারি ডেটা পোস্ট করা কি সম্ভব? যদি তাই হয়, কিভাবে কাজ করবে? উদাহরণ দেখতে কেমন হবে?


আপনি যদি এটি কোনও ফাইলে লগইন না করে থাকেন তবে আপনি এটি কোথায় লগইন করছেন?
slm

@ এসএলএম, আমার মনে হয় আপনি ভুল বুঝেছেন। আমি আমার ক্লায়েন্ট-পাশের অন্যান্য কলগুলিকে সরল পাঠ্যে একটি লগ ফাইলে লগ করছি (ভার্বাটিম সমতুল্য কার্ল কমান্ড হিসাবে)। যাইহোক, আমি লগ করা প্রতিটি বাইনারি কার্ল কমান্ডের জন্য কিছু এলোমেলো ফাইল উল্লেখ করতে চাই না। আমি কার্ল কমান্ডের পুরো পাঠ্যটি পুরোপুরি স্বয়ংসম্পূর্ণ হয়ে উঠতে চাই যাতে কেউ এই পাঠ্যটিকে টার্মিনালে অনুলিপি করতে পারে এবং কলটি পুনরুত্পাদন করতে এটি চালাতে পারে।
কার্ক ওল

উত্তর:


45

আপনি STDIN এর মাধ্যমে কার্লের মাধ্যমে ডেটাগুলি পাস করতে পারেন:

echo -e '...data...\n' | curl -X POST --data-binary @- http://foo.com

@-বলে curlstdin থেকে টান।

বাইনারি ডেটা কার্ল করতে পাইপ (উদাহরণস্বরূপ):

echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com

তবে এটি বাইনারি ডেটা কার্ল কমান্ডের পাঠ্যের অংশ হতে দেয় না। তাহলে কি তা সম্ভব নয়?
কर्क ওল

আপনি যা চাইছেন তা কার্যকর হবে না। কার্ল কমান্ডের ডেটা হয় কার্লের মধ্যে পাইপ করা যায় বা @ <ফাইল>> সুবিধার মাধ্যমে টানতে পারে। আমার জানা মতে অন্য কোন পদ্ধতি নেই।
slm

1
আসলে, আপনার উত্তর নিখুঁত - আপনার উদাহরণের পরিবর্তে কেবল বাইনারি ব্যবহার করা উচিত। :) অর্থাৎ হেক্সাডেসিমাল হিসাবে কাঁচা বাইনারি ডেটা echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com কোথায় \x03\xF1, যা আমি চাই ঠিক ঠিক তাই।
কर्क ওল

গ্রেট। আমি আপনাকে পুরোপুরি অনুসরণ করিনি। সুতরাং আপনি পাট বাইনারি ডেটা কার্লের মধ্যে পাইপ করতে চেয়েছিলেন, আমি ভেবেছিলাম আপনি অন্য কিছু চাইছেন। এটা আপনার জন্য কাজ করে খুশি।
slm

2
আমি এটি চেষ্টা করেছি : cat 1.jpg | curl -X POST --data-binary @- http://foo.com. কবজির মতো কাজ করেছেন। বৈধতা দেওয়ার জন্য, আমি চেষ্টাও করেছি: cat 1.jpg | md5sumএবং md5sum 1.jpg। তারা উভয়ই একই মূল্য ফেরত দিয়েছে।
Dimitarvp

0

কেন তা নিশ্চিত নয়, তবে ঠিক যে কমান্ড লাইনটি এসএমএল প্রস্তাব করেছিল তা আমার পক্ষে কার্যকর হয়নি। সামান্য সংশোধন করে, নিম্নলিখিতগুলি কাজ করেছে:

echo -e '...data...\n' | curl -s -T - sftp://user@10.10.10.10/~/test.txt

1
এর কারণ হ'ল এসএফটিপি হ'ল এইচটিটিপি থেকে সম্পূর্ণ আলাদা আলাদা ক্ষমতা সহ সম্পূর্ণ প্রোটোকল, এবং ম্যান পেজ এবং সহায়তা বার্তা উভয়ই বলে --ডাটা-বাইনারি কেবল এইচটিটিপি (এবং এইচটিটিপিএস) এর ক্ষেত্রে প্রযোজ্য।
dave_thompson_085

এটা বোধগম্য. সেই কাজটি করার জন্য আমি বেশ কয়েকটি অনলাইন উত্সকে একত্রিত করেছিলাম তাই আমি এইচটিটিপি নির্দিষ্ট করে দেওয়া প্রশ্নের অংশটি মিস করেছি। অন্য কারওর প্রয়োজনে আমি আমার উত্তর এখানে রেখে দেব।
রিচার্ড নিনাবার

0

যোগ করা হচ্ছে এই উত্তর, echoআদেশ ডিফল্টরূপে তার আউটপুটে একটি newline appends। এটি \nআপনার বাইনারি ডেটার শেষে যুক্ত করে, তাই কার্ল সেই অক্ষরটিকে ইনপুট হিসাবেও গ্রহণ করবে।

এটি এড়াতে আপনি printfকমান্ড বা -nস্যুইচটি এর মতো ব্যবহার করতে পারেন :

printf '\x03\xF1' | curl -X POST --data-binary @- http://foo.com

অথবা

echo -en '\x03\xF1' | curl -X POST --data-binary @- http://foo.com

এইভাবে কার্ল ইনপুটটিতে কোনও নতুন লাইন যুক্ত করা হবে না এবং কার্লকে খাওয়ানো বাইটগুলি হ'ল আপনার পাস করা হবে echo

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.