একটি HTTP গেটের সাথে একটি অ্যারে প্রেরণ করুন


99

আমি কীভাবে কোনও HTTP অনুরোধের সাথে একটি অ্যারে প্রেরণ করতে পারি?

অনুরোধটি প্রেরণের জন্য আমি জিডব্লিউটি ক্লায়েন্ট ব্যবহার করছি।


সত্যই, এটি আলোকিত করতে এইচটিএমএল আরও ভাল। <input name="user[name]" /> <input name="user[email]" />একটি <form>কন্টেইনারের ভিতরে থাকা সমস্ত ব্রাউজারে ডিফল্টরূপে কীভাবে জমা দিতে হয় তা জানে। ইনপুটগুলি ব্যবহারকারী হয়ে উঠবে [নাম] = সোমটেক্সট এবং ব্যবহারকারী [ইমেল] =Some@TEXT.com --- এটি হোস্ট অ্যাপ্লিকেশন যা ডায়াকডিংটিকে আবার অ্যারেতে পরিচালনা করতে হবে
গারেট ক্লোবোন

উত্তর:


156

এটি টার্গেট সার্ভার কী গ্রহণ করে তার উপর নির্ভর করে। এটির জন্য কোনও নির্দিষ্ট মান নেই। এও উইকিপিডিয়া: ক্যাইরি স্ট্রিং দেখুন :

যদিও এখানে কোনও নির্দিষ্ট মান নেই, বেশিরভাগ ওয়েব ফ্রেমওয়ার্কগুলি একক ক্ষেত্রের সাথে একাধিক মানকে যুক্ত করতে দেয় (যেমন field1=value1&field1=value2&field2=value3)। [৪] [৫]

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

foo=value1&foo=value2&foo=value3
String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]

request.getParameter("foo")এটা কাজ করবে, কিন্তু এটি শুধুমাত্র প্রথম মান ফিরে আসবেন।

String foo = request.getParameter("foo"); // value1

এবং, যখন লক্ষ্য সার্ভারটি পিএইচপি বা আরআর এর মতো দুর্বল টাইপ করা ভাষা ব্যবহার করে , তখন আপনাকে []একক মানের পরিবর্তে মানগুলির একটি অ্যারে ফিরিয়ে দিতে ভাষাটিকে ট্রিগার করার জন্য আপনার ব্রেসগুলির সাথে পরামিতিটির প্রত্যয় প্রয়োজন ।

foo[]=value1&foo[]=value2&foo[]=value3
$foo = $_GET["foo"]; // [value1, value2, value3]
echo is_array($foo); // true

আপনি যদি এখনও ব্যবহার করেন foo=value1&foo=value2&foo=value3তবে এটি কেবল প্রথম মানটিই ফিরিয়ে দেবে।

$foo = $_GET["foo"]; // value1
echo is_array($foo); // false

মনে রাখবেন যে আপনি যখন foo[]=value1&foo[]=value2&foo[]=value3কোনও জাভা সার্লেটতে প্রেরণ করবেন তখন আপনি সেগুলি পেতে পারেন তবে ব্রেসগুলি সহ আপনাকে সঠিক প্যারামিটারের নামটি ব্যবহার করতে হবে।

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]

যখন সার্ভার নোডজে ব্যবহার করে, আপনি কেবল foo = [মান 1, মান 2, মান 3] হিসাবে অ্যারে পাস করতে পারেন re আপনাকে কেবল এটির বিশ্লেষণ করতে হবে এবং আপনার কোডে এই অ্যারেটি ব্যবহার করতে হবে
অক্ষয় বারপুট

কি বাজে, ভাষা টাইপিং এর সাথে কোন সম্পর্ক নেই
সর্বনাম

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

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

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

188

আমি জানি এই পোস্টটি সত্যিই পুরানো, তবে আমাকে জবাব দিতে হবে কারণ বালুসকের উত্তরটি সঠিক হিসাবে চিহ্নিত হলেও এটি সম্পূর্ণ সঠিক নয়।

আপনাকে "[]" যুক্ত করে কোয়েরিটি লিখতে হবে এভাবে:

foo[]=val1&foo[]=val2&foo[]=val3

4
আপনি এই পুরানো পোস্টে জবাব খুশি! এটি অবশ্যই সাহায্য করেছিল।
থা লিয়াং

@ বালুসসি ভুল, এটি সি / সি ++ / সি # তে পুরোপুরি সূক্ষ্মভাবে কাজ করে (এবং জাভাতে কাজ করতে পারে)। এটি কেবল আপনার জাভা ব্যবহারের কারণে অভিন্ন নামগুলির অর্থ ব্যাখ্যা করা হয়। আপনার উত্তরটি তবে ইউআরআই ফর্ম্যাটিংয়ের ভুল ব্যবহার
গ্রেট ক্লোবোন

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