জেসন প্যারামিটারের সাথে কার্ল জিইটি অনুরোধ করুন


124

আমি এই জাতীয় সিআরএল এর মাধ্যমে কমান্ড প্রম্পট থেকে একটি রিমোট REST এপিআইতে "জিইটি" অনুরোধ প্রেরণের চেষ্টা করছি:

curl -X GET -H "Content-type: application/json" -H "Accept: application/json"  "http://server:5050/a/c/getName/{"param0":"pradeep"}"

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

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


আপনার সার্ভারের দিকে কী ত্রুটি পোস্ট করা হচ্ছে?
ভীতিজনক Wombat

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

আপনি কি কার্ল -i -H "স্বীকার করুন: অ্যাপ্লিকেশন / json" " সার্ভার দিয়ে চেষ্টা করতে পারেন : 5050 / a / c / getName {" param0 ":" প্রদীপ "}" (এক্স-এর পরিবর্তে বিকল্প -i))
হর্ষাল বুলসারা

উত্তর:


139

এই কাজ করা উচিত :

  curl -i -H "Accept: application/json" 'server:5050/a/c/getName{"param0":"pradeep"}'

এক্স এর পরিবর্তে বিকল্প -i ব্যবহার করুন।


4
সম্ভবত বিভিন্ন উদ্ধৃতি? "সার্ভার: 5050 / a / c / getName para 'param0': 'প্রদীপ'}"
এবি

এটি সত্যিই হয় 'server:5050/a/c/getName{"param0":"pradeep"}'বা হয় "server:5050/a/c/getName{\"param0\":\"pradeep\"}"
বেনজমিন ডাব্লু।

16

আপনি যদি নিজের ডেটা দেহের অভ্যন্তরে প্রেরণ করতে চান তবে আপনাকে একটি POSTবা PUTতার পরিবর্তে তৈরি করতে হবে GET

আমার জন্য, এটা পছন্দ আপনি পাঠাবার চেষ্টা করছি দেখে মনে হচ্ছে কোনো URI পরামিতি সঙ্গে ক্যোয়ারী , যা এর সাথে সম্পর্কিত নয় GET, এছাড়াও আপনি এই পরামিতি লাগাতে পারেন POST, PUTইত্যাদি।

ক্যোয়ারী একটি markচ্ছিক অংশ, যা একটি প্রশ্ন চিহ্ন ("?") দ্বারা পৃথক করা হয়েছে, এতে অতিরিক্ত শনাক্তকরণ তথ্য রয়েছে যা প্রকৃতিতে শ্রেণিবদ্ধ নয়। ক্যোরিয় স্ট্রিং সিনট্যাক্সটি সাধারণভাবে সংজ্ঞায়িত করা হয় নি তবে এটি সাধারণত = জোড়ের অনুক্রম হিসাবে অর্গলন বা একটি এম্পারস্যান্ড দ্বারা জোড়া পৃথক করে সাজানো হয়।

উদাহরণ স্বরূপ:

curl http://server:5050/a/c/getName?param0=foo&param1=bar

7
যে কোনও এইচটিটিপি অনুরোধ বার্তাকে একটি বার্তার মূল অংশ থাকতে দেওয়া হয়েছে। জিইটি শব্দার্থবিদ্যার কারণে এটি জিইটি-র পক্ষে কখনই কার্যকর হয় না - অনুরোধের বডিটির সামগ্রীগুলি যদি থাকে তবে কোনও প্রতিক্রিয়া পরিবর্তন করা উচিত নয়।
জেরেক প্রাইজিডজকি

12

আপনি যদি সত্যিই শরীরের জেএসএনের সাথে জিইটি অনুরোধ জমা দিতে চান (এক্সএইচআর অনুরোধের জন্য বলুন এবং আপনি জানেন যে জিইটি অনুরোধে সার্ভার শরীরের প্রক্রিয়াজাতকরণ সমর্থন করে), আপনি করতে পারেন:

curl -X GET \
  -H "Content-type: application/json" \
  -H "Accept: application/json" \
  -d '{"param0":"pradeep"}' \
  "http://server:5050/a/c/getName"

বেশিরভাগ আধুনিক ওয়েব সার্ভারগুলি এই ধরণের অনুরোধ গ্রহণ করে।


এটি ফলাফলের উদ্দেশ্যে কাজ করে না। ডিবাগিংয়ের জন্য httpbin.org/get ব্যবহার করে , এই ফলন হয়: { "args": {}, "headers": { "Accept": "application/json", "Content-Length": "20", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:57.0) Gecko/20100101 Firefox/57.0" }, "origin": "27.94.235.50, 27.94.235.50", "url": "https://httpbin.org/get" }কিছুই পাওয়া যায় না। আপনার কাছে একটি কোয়েরি স্ট্রিং ব্যবহার করতে হবেcurl -X GET https://httpbin.org/get?data=%7B%22param0%22%3A%22pradeep%22%7D
জ্যাকস

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

বিকল্পভাবে কেউ কী করতে পারে, যদি সার্ভারের পাশের একটির যথেষ্ট নিয়ন্ত্রণ থাকে তবে "পদ্ধতি": "পেতে" এর মতো জসন ডেটাতে একটি বিশেষ সম্পত্তি যুক্ত করা হয়, একটি পোস্টের অনুরোধে পেলোডটি প্রেরণ করুন এবং সার্ভারে কোডটি এটি ব্যাখ্যা করতে হবে একটি অনুরোধ হিসাবে পেতে।
জ্যাকস

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

হ্যা, এটা সত্য. আপনি যদি সার্ভারটি নিয়ন্ত্রণ করেন। আপনার মন্তব্যটি নীচের বক্তব্য দ্বারা উত্সাহিত হয়েছিল যা আমি বলেছিলাম, যেমন অভিযুক্ত ফলাফলটি উত্থাপন করবে না: "বেশিরভাগ আধুনিক ওয়েব সার্ভারগুলি এই ধরণের অনুরোধ গ্রহণ করে"। প্রকৃতপক্ষে, তারা আপনার বর্ণিত অনুরোধটি মেনে নেবে, তবে অনুরোধটি ফলাফল নির্ধারণ করতে ব্যর্থ হবে। অথবা আপনি এই বিবৃতিটি পুনরায় সংশোধন করতে চাইতে পারেন: "বেশিরভাগ আধুনিক ওয়েব সার্ভারগুলি এই ধরণের অনুরোধটি স্বীকার করে যে আপনি সার্ভারের উপর সরাসরি নিয়ন্ত্রণ রাখছেন, তবে এটি মান
জ্যাকস

8

জিইটি নাম মান জোড় লাগে।

এর মতো কিছু চেষ্টা করুন:

curl http://server:5050/a/c/getName/?param1=pradeep

অথবা

curl http://server:5050/a/c/getName?param1=pradeep

বিটিডব্লিউ একটি নিয়মিত আরএসটি-র মতো দেখতে হবে

curl http://server:5050/a/c/getName/pradeep যদি এটি জিইটি ইউআরএলে জেএসএন নেয়, এটি কোনও মানক উপায় নয়।


4

ব্যবহারকারীর নাম এবং পাসওয়ার্ড সুরক্ষিত পরিষেবার জন্য নিম্নলিখিত ব্যবহার করুন

curl -u admin:password -X GET http://172.16.2.125:9200 -d '{"sort":[{"lastUpdateTime":{"order":"desc"}}]}'

কার্ল-এক্স পোস্ট-এইচ "বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / জেসন" -ড 'stuff "স্টাফ": "জিনিস"}' http: // ...
কিথপজোলি

আমি ভুল হলে আমাকে সংশোধন করুন, তবে কার্ল অনুরোধটি (এবং পদ্ধতিটি উল্লেখ না করে) অনুরোধটি একটি পোষ্ট করে দেবে।
গকিগুকস

3

চেষ্টা

curl -G ...

পরিবর্তে

curl -X GET ...

সাধারণত আপনার এই বিকল্পের প্রয়োজন নেই। সমস্ত ধরণের জিইটি, শির, পোষ্ট এবং পুট অনুরোধগুলি নিবেদিত কমান্ড লাইন বিকল্পগুলি ব্যবহার করে অনুরোধ করা হয়।

এই বিকল্পটি কেবল এইচটিটিপি অনুরোধে ব্যবহৃত প্রকৃত শব্দকে পরিবর্তন করে, কার্লের আচরণের পদ্ধতিতে এটি পরিবর্তন করে না। সুতরাং উদাহরণস্বরূপ, আপনি যদি সঠিক হেড অনুরোধ করতে চান তবে -X হেড ব্যবহার করা যথেষ্ট হবে না। আপনাকে -I, - হেড বিকল্পটি ব্যবহার করতে হবে।


1

উল্লিখিত সমাধানগুলির কোনওটিই কোনও কারণে আমার পক্ষে কাজ করে নি। এখানে আমার সমাধান। এটা বেশ বেসিক।

কার্ল -X তাহলে GET API_ENDPOINT -H 'বিষয়বস্তু-প্রকার: আবেদন / JSON' -d ' JSON_DATA '

API_ENDPOINT হল আপনার এপিআই শেষ পয়েন্ট যেমন: http://127.0.0.1:80/api

-H হেডার সামগ্রী যুক্ত করতে ব্যবহার করা হয়েছে।

জেএসএন_ডাটা হ'ল আপনার অনুরোধের বডি এটি :: :: data "ডেটা_কি": "মান"} এর মতো কিছু হতে পারে} '' আশেপাশের জেএসএন_ডাটা গুরুত্বপূর্ণ।

পরে কিছু -d তথ্য যা আপনি পেতে অনুরোধ প্রেরণ প্রয়োজন

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