আমি কীভাবে সিআরএল দিয়ে জেএসএন ডেটা পোস্ট করব?


2827

আমি উবুন্টু ব্যবহার করেছি এবং এটিতে সিআরএল ইনস্টল করেছি। আমি আমার স্প্রিং REST অ্যাপ্লিকেশনটি সিআরএল দিয়ে পরীক্ষা করতে চাই। আমি আমার পোষ্ট কোডটি জাভা সাইডে লিখেছি। তবে আমি সিআরএল দিয়ে এটি পরীক্ষা করতে চাই। আমি একটি জেএসএন ডেটা পোস্ট করার চেষ্টা করছি। উদাহরণ ডেটা এর মত:

{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}

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

curl -i \
    -H "Accept: application/json" \
    -H "X-HTTP-Method-Override: PUT" \
    -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
    http://localhost:8080/xx/xxx/xxxx

এটি এই ত্রুটিটি প্রদান করে:

HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT

ত্রুটির বর্ণনাটি হ'ল:

সার্ভারটি এই অনুরোধটিকে প্রত্যাখ্যান করেছে কারণ অনুরোধ সত্তা অনুরোধ পদ্ধতির () জন্য অনুরোধ করা উত্স দ্বারা সমর্থিত নয় এমন ফর্ম্যাটে রয়েছে।

টমক্যাট লগ: "পোস্ট / ইউআই / ওয়েবঅ্যাপ / কনফারেন্স / পরিষ্কার HTTP / 1.1" 415 1051

সিআরএল কমান্ডের সঠিক বিন্যাসটি কী?

এটি আমার জাভা সাইড PUTকোড (আমি জিইটি এবং মোছার পরীক্ষা করেছি এবং তারা কাজ করে):

@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
    configuration.setName("PUT worked");
    //todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
    return configuration;
}

6
বসন্ত 3.2.0 পোস্ট অনুরোধের লিঙ্কটি চেকআউট করুন ।
আমির এইচডি

8
রেস্টলফুল মাইক্রোসার্ভেসিসের অ্যাডহক টেস্টিংয়ের জন্য কার্ল ব্যবহার করে একটি দুর্দান্ত পোস্ট রয়েছে যা এটি একাধিক উদাহরণ সহ কভার করে।
upitau

উত্তর:


4336

আপনার অ্যাপ্লিকেশন / জসন-এ আপনার সামগ্রী-প্রকার সেট করতে হবে। কিন্তু -dসামগ্রী-প্রকারটি প্রেরণ করে application/x-www-form-urlencoded, যা বসন্তের পক্ষে গৃহীত হয় না।

এ খুঁজছি কার্ল man পৃষ্ঠা , আমি মনে করি আপনি ব্যবহার করতে পারেন -H:

-H "Content-Type: application/json"

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

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  http://localhost:3000/api/login

( -H-এর সংক্ষিপ্ত রূপ --header, -dজন্য --data)

লক্ষ্য করুন -request POSTনেই ঐচ্ছিক যদি আপনি ব্যবহার -d, যেমন -dপতাকা একটি POST রিকোয়েস্ট বোঝা।


উইন্ডোজগুলিতে বিষয়গুলি কিছুটা আলাদা। মন্তব্য থ্রেড দেখুন।


262
উইন্ডোগুলির জন্য, জসন এর আশেপাশে একক উদ্ধৃতি কার্যকর হয়নি এবং আমি ডাবল উদ্ধৃতি দিয়ে পালিয়ে এসেছি। curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
hIpPy

37
উইন্ডোজের অধীনে আমার এই বিন্যাসে কোট ব্যবহার করে আমার উদ্ধৃতি এড়াতে হবে "{ """key1""": """value1""" }"। এছাড়াও এই উত্তর: stackoverflow.com/questions/18314796/...
chodorowicz

4
@ chodorowicz যে ভয়াবহ! আমি কেবল ভিবি থেকে এই সিনট্যাক্সটি জানি!
সান প্যাট্রিক ফ্লয়েড

3
আমার কাছে পোষ্ট অনুরোধগুলির সাথে সমস্যা হয়েছে তবে এটি "অ্যাপ্লিকেশন / জেসন" মূলধন দ্বারা সমাধান করেছে যাতে আপনি যদি 415 ত্রুটি পান তবে মূলধনটি পরীক্ষা করুন।
ওয়াইটকাস্টল

5
@ostrokach দুঃখিত আপনার সময় নষ্ট হয়েছে। সিনট্যাক্স ওএসএক্সে আমার পক্ষে এটি পোস্ট করার সময় খুব ভাল কাজ করেছিল (পুনরায় চেষ্টা করা হয়নি)। অনুমান করুন এটি কেবল একটি প্ল্যাটফর্মের পার্থক্য। আমি কল্পনা করেছিলাম যে উঁচু লোকগুলি এটির সাহায্যে এসেছে from
অ্যাডাম টটল

564

আপনার ডেটা কোনও ফাইলে রাখার চেষ্টা করুন, বলুন body.jsonএবং তারপরে ব্যবহার করুন

curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf

12
আপনার --data-binaryপরিবর্তে বিকল্পটি ব্যবহার করা উচিত --data। কেউ আশা করতে পারে যে ক্লায়েন্টটি যেমন রয়েছে তেমন ডেটা প্রেরণ করে তবে --dataসিআর আনড এলএফটিকে ইনপুট থেকে সরিয়ে দেয়।
এইচ 2 স্টেইন

14
ইনলাইন জসন স্ট্রিং সহ সিআরএল ব্যবহার করা দুঃস্বপ্ন বলে মনে হচ্ছে। ডাবল উদ্ধৃতি চরিত্রটি বাদ দেওয়ার দরকার আছে। এই জাতীয় একটি ফাইল সঙ্গে যেতে ভাল।
এক্সট্রিম বাইকার

46
@ফাইলের নামের আগে একটি অক্ষর যুক্ত করা গুরুত্বপূর্ণ , অন্যথায় এটি কাজ করবে না। আমি এই
কুঁকড়ে শুনে

3
এইভাবে আপনি ফাইলটিতে একটি JSON লিঙ্ক চালাতে পারেন তা দেখতে JSON পার্স করার ক্ষেত্রে কোনও ত্রুটি আছে কিনা।
দতাশমন

4
উইন্ডোজে আপনার "@ বডি.জসন" ফাইলটির চারপাশে ডাবল উদ্ধৃতি দরকার
স্টমফ

101

আপনি বিশ্রাম দরকারী বলে মনে করতে পারেন: https://github.com/micha/resty

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

$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing
$ GET /blogs.json                  #Gets http://127.0.0.1:8080/data/blogs.json
                                   #Put JSON
$ PUT /blogs/2.json '{"id" : 2, "title" : "updated post", "body" : "This is the new."}'
                                   # POST JSON from a file
$ POST /blogs/5.json < /tmp/blog.json

এছাড়াও এটি প্রায়শই সামগ্রীর ধরণের শিরোনাম যুক্ত করা প্রয়োজন। আপনি একবার এটি করতে পারেন, যদিও, প্রতি-সাইট প্রতি-পদ্ধতিতে কনফিগার ফাইল যুক্ত করার জন্য একটি ডিফল্ট সেট করতে: ডিফল্ট RESTY বিকল্প সেট করা


93

উইন্ডোজের জন্য, -dমূল্যের একক মূল্য থাকা আমার পক্ষে কাজ করে না, তবে এটি ডাবল উদ্ধৃতিতে পরিবর্তনের পরে কাজ করেছিল। এছাড়াও আমার কোঁকড়ানো বন্ধনীগুলির ভিতরে ডাবল উদ্ধৃতিগুলি পালাতে হবে।

অর্থাৎ, নিম্নলিখিতটি কাজ করে নি:

curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path

তবে নিম্নলিখিতগুলি কাজ করেছে:

curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path

5
এফওয়াইআই - দেখে মনে হচ্ছে আপনি
জসন

3
উইন্ডোজে আমার জন্য, "চারপাশের ডেটাগুলি কাজ করে না, পরিবর্তে কোনও উদ্ধৃতি কাজ করে না
রোদেডো

3
আপনি যদি পাওয়ারশেল ব্যবহার করছেন তবে এই উত্তরটি দেখুন।
RSSenna

86

এটি ব্যবহার করে আমার পক্ষে কাজ করেছে:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do

এটি সুখে বসন্ত নিয়ন্ত্রকের কাছে ম্যাপ করা হয়েছিল:

@RequestMapping(value = "/postJsonReader", method = RequestMethod.POST)
public @ResponseBody String processPostJsonData(@RequestBody IdOnly idOnly) throws Exception {
        logger.debug("JsonReaderController hit! Reading JSON data!"+idOnly.getId());
        return "JSON Received";
}

IdOnlyএকটি আইডি সম্পত্তি সহ একটি সরল POJO


56

উদাহরণ হিসাবে, একটি JSON ফাইল, params.json তৈরি করুন এবং এতে এই লিখিত সামগ্রী যুক্ত করুন:

[
    {
        "environment": "Devel",
        "description": "Machine for test, please do not delete!"
    }
]

তারপরে আপনি এই আদেশটি চালান:

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server

42

আমি ঠিক একই সমস্যা মধ্যে দৌড়ে। আমি নির্দিষ্ট করে সমাধান করতে পারতাম

-H "Content-Type: application/json; charset=UTF-8"

37

এটি আমার পক্ষে ভাল কাজ করেছে।

curl -X POST --data @json_out.txt http://localhost:8080/

কোথায়,

-X এর অর্থ HT ক্রিয়াপদ।

--data আপনি যে ডেটা প্রেরণ করতে চান তা বোঝায়।


5
-X POSTএই উদাহরণে অপ্রয়োজনীয়
সফটওয়্যার ইঞ্জিনিয়ার

31

আপনার কমান্ড একত্রিত করার জন্য আপনি পোস্টম্যানকে এর স্বজ্ঞাত GUI সহ ব্যবহার করতে পারেন cURL

  1. পোস্টম্যান ইনস্টল করুন এবং শুরু করুন
  2. আপনার ইউআরএল, পোস্ট বডি, অনুরোধ শিরোনাম ইত্যাদি লিখুন পিপি।
  3. ক্লিক করুন Code
  4. cURLড্রপ-ডাউন তালিকা থেকে নির্বাচন করুন
  5. আপনার cURLআদেশটি অনুলিপি করুন এবং আটকান

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


6
বুঝতে পারিনি যে পোস্টম্যানের মধ্যে এই বৈশিষ্ট্যটি অন্তর্ভুক্ত ছিল। এটা ইশারা জন্য ধন্যবাদ!
এরিয়েস্টভ

29

সিআরএল উইন্ডোজ ব্যবহার করে এটি ব্যবহার করে দেখুন:

curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee

28

আপনি সিআরএল রূপান্তর করতে পোস্টম্যান ব্যবহার করতে পারেনএখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


1
অনেকটা ধন্যবাদ @ চিরকালের জন্য - এটি আমার জন্য জীবন
রক্ষাকারী

24

এইচটিটিপি একটি প্রস্তাবিত বিকল্প curlকারণ আপনি ঠিক করতে পারেন just

$ http POST http://example.com/some/endpoint name=value name1=value1

এটি ডিফল্টভাবে JSON কে কথা বলে এবং আপনার জন্য প্রয়োজনীয় শিরোনাম সেট করার পাশাপাশি বৈধ JSON হিসাবে ডেটা এনকোডিং উভয়ই পরিচালনা করবে। এছাড়াও আছে:

Some-Header:value

শিরোনামের জন্য, এবং

name==value

ক্যোয়ারিং স্ট্রিং পরামিতিগুলির জন্য। আপনার কাছে যদি ডেটাগুলির একটি বিশাল অংশ থাকে তবে আপনি এটি কোনও ফাইল থেকে পড়তে পারেন এটিতে JSON এনকোড করা আছে:

 field=@file.txt

20

আপনি যদি একটি রিস্টফুল ইন্টারফেসের বিরুদ্ধে প্রচুর জেএসএন প্রেরণ / প্রতিক্রিয়া পরীক্ষা করছেন তবে আপনি ক্রোমের জন্য পোস্টম্যান প্লাগ-ইন পরীক্ষা করতে চাইতে পারেন (যা আপনাকে ম্যানুয়ালি ওয়েব পরিষেবা পরীক্ষার সংজ্ঞা দিতে দেয়) এবং এর নোড.জেএস-ভিত্তিক নিউম্যান কমান্ড লাইন সহচর (যা আপনাকে পোস্টম্যান পরীক্ষার "সংগ্রহ" এর বিরুদ্ধে পরীক্ষা স্বয়ংক্রিয় করতে দেয়)) নিখরচায় এবং উন্মুক্ত!


18

এটি আমার জন্য আরও ভাল কাজ করেছে, অতিরিক্তভাবে বেসিক প্রমাণীকরণ ব্যবহার করে:

curl -v --proxy '' --basic -u Administrator:password -X POST -H "Content-Type: application/json"
        --data-binary '{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}'
        http://httpbin.org/post

অবশ্যই, আপনার কখনই এসএসএল এবং একটি পরীক্ষিত শংসাপত্র ছাড়া বেসিক প্রমাণীকরণ ব্যবহার করা উচিত নয়।

আমি আজ আবার এই গাড়ীতে আঘাত, Windows এর জন্য Cygwin এর কার্ল 7.49.1 ব্যবহার ... আর যখন ব্যবহার --dataবা --data-binaryএকটি JSON- যুক্তি সঙ্গে, কার্ল বিভ্রান্ত হন এবং ব্যাখ্যা করা হবে {}একটি URL ফর্মা হিসেবে তাদেরকে JSON হবে। -gসিআরএল গ্লোব্বিং বন্ধ করার জন্য একটি যুক্তি যুক্ত করা এটি স্থির করে।

কার্ল করতে বন্ধনী সহ একটি ইউআরএল পাস করা দেখুন ।


17

আপনি নিজের জেএসওএন সামগ্রীটি কোনও ফাইলে রেখে দিতে পারেন এবং --file-uploadস্ট্যান্ডার্ড ইনপুটটির মাধ্যমে বিকল্পটি ব্যবহার করে কার্ল করতে এটি পাস করতে পারেন :

 echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -


10

আমি একটি ওয়েব সার্ভারের সাথে পরীক্ষার জন্য নীচের ফর্ম্যাটটি ব্যবহার করছি।

use -F 'json data'

আসুন এই জেএসএন ডিক ফর্ম্যাটটি ধরে নিই:

{
    'comment': {
        'who':'some_one',
        'desc' : 'get it'
    }
}

পুরো উদাহরণ

curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'

6

পে-লোড যুক্ত করতে -d বিকল্পটি ব্যবহার করুন

curl -X POST \
http://<host>:<port>/<path> \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"foo": "bar",
"lorem": "ipsum"
}'

এছাড়াও:

পোষ্ট পদ্ধতিটি ব্যবহার করতে -পোস্ট ব্যবহার করুন

টাইপ শিরোনাম গ্রহণ করতে এইচ 'স্বীকার করুন: অ্যাপ্লিকেশন / জেসন' ব্যবহার করুন

কনটেন্ট টাইপ শিরোলেখ যুক্ত করতে এইচ 'কনটেন্ট-টাইপ: অ্যাপ্লিকেশন / জেসন' ব্যবহার করুন


আমি এটি ব্যবহার করার চেষ্টা করেছি তবে {"ত্রুটি" পেয়েছি: ["কোনও ডেটা সরবরাহ করা হয়নি"]} ত্রুটি।
সুরেশ


5

দয়া করে এই সরঞ্জামটি পরীক্ষা করুন । এটি সহজে কার্ল স্নিপেট তৈরি করতে আপনাকে সহায়তা করে।

curl -XGET -H "Accept: application/json" -d "{\"value\":\"30\",\"type\":\"Tip 3\",\"targetModule\":\"Target 3\",\"configurationGroup\":null,\"name\":\"Configuration Deneme 3\",\"description\":null,\"identity\":\"Configuration Deneme 3\",\"version\":0,\"systemId\":3,\"active\":true}" "http://localhost:8080/xx/xxx/xxxx"

5

এটি করার আরেকটি উপায় এখানে আপনার কাছে যদি গতিশীল ডেটা অন্তর্ভুক্ত থাকে।

#!/bin/bash

version=$1
text=$2
branch=$(git rev-parse --abbrev-ref HEAD)
repo_full_name=$(git config --get remote.origin.url | sed 's/.*:\/\/github.com\///;s/.git$//')
token=$(git config --global github.token)

generate_post_data()
{
  cat <<EOF
{
  "tag_name": "$version",
  "target_commitish": "$branch",
  "name": "$version",
  "body": "$text",
  "draft": false,
  "prerelease": false
}
EOF
}

echo "Create release $version for repo: $repo_full_name branch: $branch"
curl --data "$(generate_post_data)" "https://api.github.com/repos/$repo_full_name/releases?access_token=$token"

1
তুমি আমার জীবন বাঁচিয়েছ!
অভিমন্যু

4

আমি জানি, এই প্রশ্নের অনেক উত্তর দেওয়া হয়েছে তবে আমি কোথায় ইস্যু করেছি তা শেয়ার করতে চেয়েছিলাম:

কার্ল-এক্স পোস্ট http: // আপনার-সার্ভার-শেষ-পয়েন্ট -H "সামগ্রী-প্রকার: অ্যাপ্লিকেশন / জসন" -d @ আপনার-জাসন-ফাইল.জসন

দেখুন, আমি সবকিছু ঠিকঠাক করেছি, কেবল একটি জিনিস - "@" আমি JSON ফাইলের পথের আগে মিস করেছি।

আমি ইন্টারনেটে একটি প্রাসঙ্গিক গোপনীয় পেয়েছি - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58

আশা করি যে কয়েকজনকে সাহায্য করতে পারে। ধন্যবাদ


1

আপনি যদি নিজের বসন্ত বুট অ্যাপ্লিকেশনটিতে SWAGGER কনফিগার করেন এবং আপনার অ্যাপ্লিকেশন থেকে কোনও এপিআই আবেদন করেন তবে আপনি সেই সিআরএল অনুরোধটিও দেখতে পাবেন।

আমি মনে করি এটি সিআরএল এর মাধ্যমে অনুরোধগুলি উত্পন্ন করার সহজ উপায়।


-6

ইউআরএল শেষে আপনি যে ফর্ম্যাটটি চান তার এক্সটেনশনটি পাস করতে পারেন। যেমন http: // লোকালহোস্ট: 8080 / এক্সএক্স / এক্সএক্সএক্স / এক্সএক্সএক্সএক্স। জেসন

অথবা

HTTP: // স্থানীয় হোস্ট: 8080 / XX এই জন্মতারিখগুলো / XXX / হাতের .xml

দ্রষ্টব্য: আপনার পোমে আপনাকে জ্যাকসন এবং জ্যাক্সবি ম্যাভেন নির্ভরতা যুক্ত করতে হবে।


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