কার্ল কমান্ড লাইন ব্যবহার করে এক্সএমএল ফাইল প্রেরণ / পোস্ট করুন


388

আমি কিভাবে পাঠাতে পারেন / একটি স্থানীয় সার্ভারে একটি XML ফাইল পোষ্ট HTTP: // স্থানীয় হোস্ট: 8080 কম্যান্ড লাইন থেকে কার্ল ব্যবহার করছেন?

আমার কোন আদেশ ব্যবহার করা উচিত?

উত্তর:


505

যদি এই প্রশ্নটি আপনার অন্যান্য হাডসনের প্রশ্নের সাথে সংযুক্ত থাকে তবে তারা প্রদত্ত আদেশটি ব্যবহার করে। কমান্ড লাইন থেকে এক্সএমএল দিয়ে এইভাবে:

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

কোনও ফাইল থেকে পড়ার জন্য আপনাকে এটি কিছুটা পরিবর্তন করতে হবে:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

পড়ুন র manpage । -ড প্যারামিটারের জন্য একটি বিমূর্তি অনুসরণ করে।

-d / - তথ্য

(এইচটিটিপি) কোনও পোষ্ট অনুরোধে নির্দিষ্ট ডেটা এইচটিটিপি সার্ভারে প্রেরণ করে, যখন কোনও ব্যবহারকারী কোনও এইচটিএমএল ফর্ম পূরণ করে জমা দেওয়ার বোতামটি চাপ দেয় তখন কোনও ব্রাউজার এটি করে। এটি কনটেন্ট-টাইপ অ্যাপ্লিকেশন / x-www-form-urlencoded ব্যবহার করে সার্ভারের কাছে ডেটা পাঠিয়ে দেবে cause -এফ / - ফর্মের সাথে তুলনা করুন।

-d / - ডেটা --data-ascii এর সমান। বিশুদ্ধভাবে বাইনারি ডেটা পোস্ট করতে, পরিবর্তে আপনাকে --data-binary বিকল্পটি ব্যবহার করা উচিত। কোনও ফর্ম ক্ষেত্রের মান URL- এনকোড করতে আপনি ব্যবহার করতে পারেন - ডেটা-ইউরেলকোড nc

যদি এই বিকল্পগুলির মধ্যে কোনও একই কমান্ড লাইনে একাধিকবার ব্যবহার করা হয় তবে নির্দিষ্ট করা ডেটা টুকরোগুলি পৃথককারী &-সিম্বোলের সাথে একত্রে একত্রিত হবে। সুতরাং, '-d নাম = ড্যানিয়েল-ডি দক্ষতা = লসি' ব্যবহার করে একটি পোস্ট খণ্ড তৈরি হবে যা দেখতে 'নাম = ড্যানিয়েল এবং দক্ষতা = লসি' বলে মনে হচ্ছে।

আপনি যদি @ চিঠিটি দিয়ে ডেটা শুরু করেন, বাকিটি থেকে ফাইলটি পড়ার জন্য একটি ফাইলের নাম হওয়া উচিত, বা - আপনি স্টিডিনের কাছ থেকে ডেটা পড়তে কার্ল করতে চান। ফাইলের সামগ্রীগুলি ইতিমধ্যে ইউআরএল-এনকোড হওয়া উচিত। একাধিক ফাইলও নির্দিষ্ট করা যায়। 'ফুবার' নামের ফাইল থেকে ডেটা পোস্ট করা এইভাবে --ডাটা @ ফুবার দিয়ে করা হবে।


2
ম্যানপেজটি পড়ুন। The contents of the file must already be URL-encoded.ওপি'র এক্সএমএল ফাইল অবশ্যই তা নয়।
কর্নেল আতঙ্ক

52
এতক্ষণ আপনি কন্টেন্ট-টাইপ নির্দিষ্ট করে --header "Content-Type:application/xml"দেওয়ার পরে ইউআরএল-এনকোডের
কর্নেল প্যানিক

12
আমি কেবল যুক্ত করব যে আপনি যদি "-d" ব্যবহার করেন তবে এটি পোস্টের ডিফল্ট হয়, সুতরাং "-X" ব্যবহার করারও দরকার নেই।
তাল লিরন

4
আপনি যদি কার্লের ফলো রিডাইরেক্টস বিকল্পটি ব্যবহার করছেন তবে এটি ব্যবহার -Lকরবেন না-X POST কারণ এটি পুনঃনির্দেশিত অনুরোধটি পোষ্টও ব্যবহার করবে। @ টাইয়ের পরামর্শ অনুসারে আপনি যদি মাত্র -d ব্যবহার করেন তবে এটি হবে না
ত্রিস্তান হ্যাভেলিক

18
সতর্কতা অবলম্বন করুন যে -dস্ট্রিপস লাইন ফাইল থেকে বিরতি দেয়। এটি এড়াতে --data-binaryপরিবর্তে ব্যবহার করুন।
ইয়ার

189

ম্যানপেজ থেকে , আমি বিশ্বাস করি এটি হ'ল ড্রয়েড যা আপনি খুঁজছেন:

-F/--form <name=content>

(এইচটিটিপি) এটি কোনও পূরণকৃত ফর্মটি কার্লকে অনুকরণ করতে দেয় যাতে কোনও ব্যবহারকারী সাবমিট বাটন টিপেছে। এটি আরএফসি 2388 অনুসারে সামগ্রী-ধরণের মাল্টিপার্ট / ফর্ম-ডেটা ব্যবহার করে পোস্টের ডেটাতে কার্ল তৈরি করে। এটি বাইনারি ফাইলগুলি ইত্যাদি আপলোড সক্ষম করে content 'বিষয়বস্তু' অংশটি একটি ফাইল হতে বাধ্য করতে, @ সাইন দিয়ে ফাইলের নামটি উপস্থাপন করুন।

উদাহরণস্বরূপ, সার্ভারে আপনার পাসওয়ার্ড ফাইলটি প্রেরণ করা, যেখানে 'পাসওয়ার্ড' হল সেই ফর্ম-ফিল্ডের নাম যেখানে / ইত্যাদি / পাসডাব্লুড ইনপুট হবে:

curl -F password=@/etc/passwd www.mypasswords.com

সুতরাং আপনার ক্ষেত্রে, এটি কিছু হবে
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
এই সমাধানটি ফাইলটি প্রেরণ করা হচ্ছে (উপরে নির্বাচিত সমাধানের বিপরীতে) নাম লেখাতে সক্ষম হওয়ার অতিরিক্ত সুবিধা রয়েছে এবং আপনি উদাহরণস্বরূপ একাধিক ফাইল প্রেরণ করতে পারেন।
ডেভিড কেয়ার্নস

13
file=@-আপনি যদি নিজের ফাইলটি পাইপ করতে চান তবে ফর্ম্যাটটি সহায়ক
স্টিভেন লু

2
যদি কেউ কোনও ফাইল এবং অন্যান্য তথ্য প্রেরণ করতে চাইছেন: আপনার প্রয়োজন অনুসারে -F কী = ভাল-এফ কী = ভল ব্যবহার করুন। একটি বড় স্ট্রিংয়ে সমস্ত পোস্ট প্যারামিটারগুলি বিভাজক করে পৃথক করা & কাজ করে না।
hgolov

আপনি কীভাবে ডেস্কটপ থেকে কার্লের মাধ্যমে আপলোড করা ফাইলগুলি গ্রহণ করতে সক্ষম ওয়েব ওয়েবসাইটটি প্রস্তুত করবেন তা উল্লেখ করতে পারেন?
সেক্সিবিস্ট 4'15

@ কুপিডভোজেল: অন্য কোনও ফাইল আপলোড ক্ষেত্রের মতো; কার্লের জন্য বিশেষভাবে কোনও হ্যান্ডলিং নেই।
পিসকভর

47

আপনি ফাইল সহ --data বিকল্পটি ব্যবহার করতে পারেন।

নামের ফাইলটিতে এক্সএমএল বিষয়বস্তু লিখুন soap_get.xML এবং কার্ল কমান্ড ব্যবহার করে অনুরোধ প্রেরণ করুন:

কার্ল-এক্স পোস্ট - শিরোলেখ "বিষয়বস্তুর ধরণ: পাঠ্য / এক্সএমএল; চরসেট = ইউটিএফ -8" --ডাটা @ সাবান_জেট.এক্সএমএল আপনার_আরএল


ওপি ইনলাইন টেক্সট নয় এমন একটি ফাইল পোস্ট করার বিষয়ে জিজ্ঞাসা করায় এটির উত্তর হওয়া উচিত।
নির্ভীক ভবিষ্যত

স্প্রিং ওয়েব সার্ভার ব্যবহার করে এটি আমার জন্য "অব্যাহতিপ্রাপ্ত" না দেখানোর জন্য এটি প্রয়োজনীয় ছিল, ধন্যবাদ!
রজারডপ্যাক

20

জেনকিন্স 1,494, আমি উবুন্টু লিনাক্স 12.10 তে চাকরি পরামিতি ব্যবহার করার জন্য একটি ফাইল পাঠাতে সক্ষম ছিল curlসঙ্গে --formপ্যারামিটার:

curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
  -Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
  -Fsubmit=Build \
  http://user:password@jenkinsserver/job/jobname/build

জেনকিন্স সার্ভারে, আমি এমন একটি কাজ কনফিগার করেছি যা একটি একক প্যারামিটার গ্রহণ করে: একটি ফাইল আপলোড প্যারামিটারের নাম myfileparam

এই কার্ল কলের প্রথম লাইন একটি পরামিতি myfileparam(চাকরির মতো) দিয়ে একটি ওয়েব ফর্ম তৈরি করে ; এর মান হ'ল স্থানীয় ফাইল সিস্টেমে কোনও ফাইলের বিষয়বস্তু /local/path/to/your/file.txt@প্রতীক প্রিফিক্স কার্ল বলে দেওয়া ফাইলের নাম বদলে স্থানীয় ফাইল পাঠান।

একটি ফাইল প্যারামিটার নামে: দ্বিতীয় লাইন একটি JSON- অনুরোধ লাইনে একটি ফর্ম পরামিতি সাথে মেলে সংজ্ঞায়িত myfileparam

তৃতীয় লাইনটি ফর্মটির বিল্ড বোতামটি সক্রিয় করে। সামনের লাইনটি "/ বিল্ড" প্রত্যয় সহ কাজের URL রয়েছে URL

যদি এই কলটি সফল হয়, কার্ল ফিরে আসে 0। যদি এটি ব্যর্থ হয় তবে পরিষেবা থেকে ত্রুটি বা ব্যতিক্রম কনসোলে মুদ্রিত হবে। এই উত্তরটি হডসন সম্পর্কিত একটি পুরাতন ব্লগ পোস্ট থেকে অনেক কিছু নিয়েছে , যা আমি নিজের প্রয়োজনে ডিকনস্ট্রাক্ট করে পুনরায় কাজ করেছি।


6

আপনি কীভাবে উইন্ডোজে কার্ল কমান্ড লাইনটি ব্যবহার করে উইন্ডোজে এক্সএমএল পোস্ট করতে পারেন তা এখানে। এর জন্য ব্যাচ /। সিএমডি ফাইলের আরও ভাল ব্যবহার করুন:

curl -i -X POST -H "Content-Type: text/xml" -d             ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^>                ^
    ^<Transaction^>                                           ^
        ^<SomeParam1^>Some-Param-01^</SomeParam1^>            ^
        ^<Password^>SomePassW0rd^</Password^>                 ^
        ^<Transaction_Type^>00^</Transaction_Type^>           ^
        ^<CardHoldersName^>John Smith^</CardHoldersName^>     ^
        ^<DollarAmount^>9.97^</DollarAmount^>                 ^
        ^<Card_Number^>4111111111111111^</Card_Number^>       ^
        ^<Expiry_Date^>1118^</Expiry_Date^>                   ^
        ^<VerificationStr2^>123^</VerificationStr2^>          ^
        ^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^>            ^
        ^<Reference_No^>Some Reference Text^</Reference_No^>  ^
        ^<Client_Email^>john@smith.com^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"

আপনি কার্ল কমান্ডটি ব্যবহারের আগে এক্সএমএল স্ট্রিংটিকে কীভাবে বিন্যাস করবেন
চিন্ময়

3

আপনার যদি একাধিক শিরোনাম থাকে তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url

3

আপনি এই আদেশটি ব্যবহার করতে পারেন:

curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json"  'API_SERVER_URL' -k 

1

আপনি যদি উইন্ডোজে কার্ল ব্যবহার করছেন :

curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.