500 অভ্যন্তরীণ সার্ভার ত্রুটি - BadFormData

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

লক্ষণ

ক্লায়েন্ট অ্যাপ্লিকেশনটি এপিআই কলের প্রতিক্রিয়া হিসাবে protocol.http.BadFormData ত্রুটি কোড সহ 500 Internal Server Error এর একটি HTTP স্ট্যাটাস কোড পায়।

ত্রুটি বার্তা

ক্লায়েন্ট অ্যাপ্লিকেশনটি নিম্নলিখিত প্রতিক্রিয়া কোডটি পায়:

HTTP/1.1 500 Internal Server Error

এছাড়াও, আপনি নিম্নলিখিত ত্রুটি বার্তাটি দেখতে পারেন:

{
   "fault":{
      "faultstring":"Bad Form Data",
      "detail":{
         "errorcode":"protocol.http.BadFormData"
      }
   }
}

ফর্ম ডেটা

এই সমস্যাটির সমাধান করার বিস্তারিত আলোচনায় যাওয়ার আগে, চলুন ফর্ম ডেটা কী তা বুঝে নিই।

ফর্ম ডেটা হলো ব্যবহারকারীর দেওয়া তথ্য, যা সাধারণত টেক্সট ইনপুট বক্স, বাটন বা চেক বক্সের মতো এলিমেন্টযুক্ত একটি HTML ফর্মের মাধ্যমে প্রদান করা হয়। ফর্ম ডেটা সাধারণত HTTP রিকোয়েস্ট বা রেসপন্সের অংশ হিসেবে কী-ভ্যালু পেয়ারের একটি সিরিজ আকারে পাঠানো হয়।

ফর্ম ডেটা ট্রান্সমিশন

  1. Content-Type: application/x-www-form-urlencoded
    • ফর্ম ডেটার আকার ছোট হলে, ডেটা কী-ভ্যালু পেয়ার হিসেবে পাঠানো হয়:

      ফর্ম ডেটা সহ নমুনা অনুরোধ:

      curl https://HOSTALIAS/somepath -H "Content-Type: application/x-www-form-urlencoded" -d "username=abc@google.com&pasword=secret123"
      
    • কী এবং ভ্যালু উভয়ের মধ্যেই থাকা যেকোনো নন-অ্যালফানিউমেরিক ক্যারেক্টারকে পার্সেন্ট এনকোড করা হয়, অর্থাৎ, সেগুলোকে একটি ক্যারেক্টার ট্রিপলেট %HH হিসেবে উপস্থাপন করা হয়, যা একটি পার্সেন্ট চিহ্নের পরে নির্দিষ্ট ক্যারেক্টারটির ASCII কোড নির্দেশকারী দুটি হেক্সাডেসিমাল ডিজিট নিয়ে গঠিত।
    • সুতরাং, যদিও ফর্ম ডেটাতে পার্সেন্ট চিহ্ন ( % ) ব্যবহারের অনুমতি আছে, এটিকে একটি বিশেষ এস্কেপ সিকোয়েন্সের শুরু হিসেবে ব্যাখ্যা করা হয়। তাই, যদি ফর্ম ডেটার কী (key) বা ভ্যালু (value)-তে পার্সেন্ট চিহ্ন ( % ) রাখার প্রয়োজন হয়, তবে এটিকে %25, যা পার্সেন্ট চিহ্ন ( % ) ক্যারেক্টারের ASCII কোডকে বোঝায়।
  2. কন্টেন্ট-টাইপ: মাল্টিপার্ট/ফর্ম-ডেটা

    আপনি যদি বিপুল পরিমাণে বাইনারি ডেটা অথবা নন-ASCII অক্ষরযুক্ত টেক্সট প্রেরণ করতে চান, তাহলে ফর্মস - সেকশন ১৭.১৩.৪.২- এ ব্যাখ্যা করা অনুযায়ী Content-Type: multipart/form-data ব্যবহার করে ডেটা পাঠাতে পারেন।

সম্ভাব্য কারণসমূহ

এই ত্রুটিটি তখনই ঘটে যখন নিম্নলিখিত সমস্ত শর্ত পূরণ হয়:

  1. ক্লায়েন্ট কর্তৃক Apigee Edge-এ পাঠানো HTTP অনুরোধটিতে নিম্নলিখিত বিষয়গুলো থাকে:
    1. Content-Type: application/x-www-form-urlencoded , এবং
    2. ফর্মের ডেটাতে শতাংশ চিহ্ন ( % ) , অথবা শতাংশ চিহ্ন ( % ) এর পরে এমন অবৈধ হেক্সাডেসিমাল অক্ষর থাকা যা ফর্ম - ধারা ১৭.১৩.৪.১ অনুযায়ী অনুমোদিত নয়।
  2. Apigee Edge-এর এপিআই প্রক্সি, ExtractVariables বা AssignMessage পলিসি ব্যবহার করে সেইসব নির্দিষ্ট ফর্ম প্যারামিটার পড়ে নেয়, যেগুলিতে রিকোয়েস্ট ফ্লোতে ব্যবহারের জন্য অননুমোদিত অক্ষর থাকে।

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

    এই ত্রুটির সম্ভাব্য কারণগুলো নিচে দেওয়া হলো:

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

সাধারণ রোগ নির্ণয়ের পদক্ষেপ

এই ত্রুটি নির্ণয় করতে নিম্নলিখিত সরঞ্জাম/কৌশলগুলোর মধ্যে যেকোনো একটি ব্যবহার করুন:

এপিআই মনিটরিং

এপিআই মনিটরিং ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. উপযুক্ত ভূমিকা সম্পন্ন একজন ব্যবহারকারী হিসেবে Apigee Edge UI-তে সাইন ইন করুন
  2. যে প্রতিষ্ঠানে আপনি বিষয়টি তদন্ত করতে চান, সেখানে যান।

  3. Analyze > API Monitoring > Investigate পৃষ্ঠায় যান।
  4. সেই নির্দিষ্ট সময়সীমাটি নির্বাচন করুন যার মধ্যে আপনি ত্রুটিগুলো লক্ষ্য করেছেন।
  5. সময়ের সাপেক্ষে ফল্ট কোডের লেখচিত্র অঙ্কন করুন।

  6. নিচে দেখানো অনুযায়ী protocol.http.BadFormData ফল্ট কোডটি রয়েছে এমন একটি সেল নির্বাচন করুন:

    ( বড় ছবি দেখুন )

  7. ফল্ট কোড protocol.http.BadFormData সম্পর্কিত তথ্য নিচে দেখানো হলো:

    ( বড় ছবি দেখুন )

  8. 'লগ দেখুন'-এ ক্লিক করুন এবং ব্যর্থ অনুরোধটির সারিটি প্রসারিত করুন।

  9. লগস উইন্ডো থেকে নিম্নলিখিত বিবরণগুলো নোট করুন:
    • স্ট্যাটাস কোড: 500
    • ত্রুটির উৎস: proxy
    • ত্রুটি কোড: protocol.http.BadFormData
    • ত্রুটি নীতি: extractvariables/EV-ExtractFormParams
  10. যদি ফল্ট সোর্স (Fault Source) proxy , ফল্ট কোড (Fault Code) protocol.http.BadFormData হয় এবং ফল্ট পলিসি (Fault Policy ) খালি না থাকে, তাহলে এটি নির্দেশ করে যে ফল্ট পলিসিতে উল্লিখিত নির্দিষ্ট পলিসিটি যখন ফর্ম ডেটা (ফর্ম প্যারামিটার) পড়ছিল বা নিষ্কাশন করছিল, তখন ত্রুটিটি ঘটেছে, এবং সেই ডেটাতে ব্যবহারের জন্য অনুমোদিত নয় এমন কোনো অক্ষর ছিল।
  11. এই উদাহরণে, X-Apigee-fault-policy হলো extractvariables/EV- ExtractFormParams, যার অর্থ হলো EV-ExtractFormParams নামের ExtractVariables পলিসিটি ফর্ম প্যারামিটারগুলো পড়া বা নিষ্কাশন করার সময় ব্যর্থ হয়েছে।

ট্রেস টুল

ট্রেস টুল ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. ট্রেস সেশনটি সক্রিয় করুন এবং নিম্নলিখিতগুলির মধ্যে যেকোনো একটি:
    • 500 Internal Server Error ত্রুটিটি ঘটার জন্য অপেক্ষা করুন, অথবা
    • আপনি যদি সমস্যাটি পুনরায় তৈরি করতে পারেন, 500 Internal Server Error সমস্যাটি পুনরায় তৈরি করতে এপিআই কলটি করুন।
  2. নিশ্চিত করুন যে 'Show all FlowInfos' চালু আছে:

  3. ব্যর্থ হওয়া অনুরোধগুলোর মধ্যে একটি নির্বাচন করুন এবং ট্রেসটি পরীক্ষা করুন।
  4. ট্রেসের বিভিন্ন ধাপ অতিক্রম করে ত্রুটিটি কোথায় ঘটেছে তা খুঁজে বের করুন।
  5. আপনি সাধারণত নিচে দেখানো নীতিমালাগুলোর কোনো একটিতে ত্রুটিটি খুঁজে পাবেন:

    উপরের নমুনা ট্রেসে লক্ষ্য করুন যে, EV-ExtractFormParams নামের ExtractVariables পলিসিটিতে ব্যর্থতাটি ঘটেছে।

  6. যে নির্দিষ্ট পলিসিটি ব্যর্থ হয়েছে, তার পরের ' Error' নামের ফ্লো-টিতে যান:

  7. ট্রেস থেকে নিম্নলিখিতগুলির মান লক্ষ্য করুন:

    ত্রুটি: Bad Form Data

    অবস্থা: PROXY_REQ_FLOW

    error.class: com.apigee.rest.framework.BadRequestException

    • Bad Form Data ত্রুটিটির মান নির্দেশ করে যে, ফর্ম প্যারামিটারগুলোতে এমন কিছু অক্ষর ছিল যা ব্যবহার করার অনুমতি নেই
    • PROXY_REQ_FLOW , এপিআই প্রক্সির রিকোয়েস্ট ফ্লোতে ত্রুটিটি ঘটেছে।
  8. ট্রেসটিতে থাকা AX (অ্যানালিটিক্স ডেটা রেকর্ডেড) ফেজটিতে যান এবং এটিতে ক্লিক করুন।
  9. নিচে স্ক্রল করে Phase Details - Error Headers সেকশনে যান এবং নীচে দেখানো অনুযায়ী X-Apigee-fault-code , X-Apigee-fault-source , এবং X-Apigee-fault-policy- এর মানগুলো নির্ধারণ করুন:

  10. লক্ষ্য করুন যে X-Apigee-fault-code এবং X-Apigee-fault-source- এর মান যথাক্রমে protocol.http.BadFormData এবং policy এবং X-Apigee-fault-policy খালি নয়। এটি নির্দেশ করে যে X-Apigee-fault-policy- তে উল্লিখিত নির্দিষ্ট পলিসিটি যখন ফর্ম ডেটা (ফর্ম প্যারামিটার) পড়ছিল বা নিষ্কাশন করছিল, তখন ত্রুটিটি ঘটেছিল, এবং সেই ডেটাতে এমন কোনো অক্ষর ছিল যা ব্যবহারের জন্য অনুমোদিত নয়

    প্রতিক্রিয়া হেডার মূল্য
    এক্স-এপিজি-ফল্ট-কোড protocol.http.BadFormData
    এক্স-এপিজি-ফল্ট-সোর্স policy
    এক্স-এপিজি-ত্রুটি-নীতি extractvariables/EV-ExtractFormParams
  11. এই উদাহরণে, X-Apigee-fault-policy হলো extractvariables/EV- ExtractFormParams, যার অর্থ হলো EV-ExtractFormParams নামের ExtractVariables পলিসিটি ফর্ম প্যারামিটারগুলো পড়া বা নিষ্কাশন করার সময় ব্যর্থ হয়েছে।

এনজিআইএনএক্স

NGINX অ্যাক্সেস লগ ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে HTTP 500 Internal Server Error সম্পর্কিত মূল তথ্য নির্ধারণ করতে NGINX অ্যাক্সেস লগ ব্যবহার করতে পারেন।
  2. NGINX অ্যাক্সেস লগগুলি পরীক্ষা করুন:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

  3. একটি নির্দিষ্ট সময়কালের মধ্যে protocol.http.BadFormData এরর কোড সহ কোনো 500 এরর আছে কিনা (যদি সমস্যাটি অতীতে ঘটে থাকে) অথবা এখনও কোনো রিকোয়েস্ট 500 এরর দেখিয়ে ফেইল করছে কিনা তা খুঁজে দেখুন।
  4. যদি আপনি protocol.http.BadFormData এর মানের সাথে মিলে যাওয়া X-Apigee-fault-code সহ কোনো 500 এরর খুঁজে পান, তাহলে X-Apigee-fault-source এবং X-Apigee-fault-policy-এর মান নির্ধারণ করুন।

    NGINX অ্যাক্সেস লগ থেকে প্রাপ্ত 500 ত্রুটির একটি নমুনা:

    NGINX অ্যাক্সেস লগ থেকে নেওয়া উপরের নমুনা এন্ট্রিটিতে X-Apigee-fault-code এবং X-Apigee-fault-source-এর জন্য নিম্নলিখিত মানগুলি রয়েছে:

    হেডার মূল্য
    এক্স-এপিজি-ফল্ট-কোড protocol.http.BadFormData
    এক্স-এপিজি-ফল্ট-সোর্স policy
    এক্স-এপিজি-ত্রুটি-নীতি extractvariables/EV-ExtractFormParams
  5. উল্লেখ্য যে, X-Apigee-fault-code এবং X-Apigee-fault-source এর মানগুলো হলো protocol.http.BadFormData এবং policy যথাক্রমে এবং X-Apigee-fault-policy খালি নয়। এটি নির্দেশ করে যে, X-Apigee-fault-policy-তে উল্লিখিত নির্দিষ্ট পলিসিটি যখন ফর্ম ডেটা (ফর্ম প্যারামিটার) পড়ছিল বা নিষ্কাশন করছিল, তখন ত্রুটিটি ঘটেছে, এবং সেই ডেটাতে এমন কোনো অক্ষর ছিল যা ব্যবহারের জন্য অনুমোদিত নয়
  6. এই উদাহরণে, X-Apigee-fault-policy হলো extractvariables/EV- ExtractFormParams, যার অর্থ হলো EV-ExtractFormParams নামের ExtractVariables পলিসিটি ফর্ম প্যারামিটারগুলো পড়ার সময় ব্যর্থ হয়েছে।

কারণ: অনুরোধের ফর্ম প্যারামিটারগুলিতে এমন অক্ষর রয়েছে যা অনুমোদিত নয়।

রোগ নির্ণয়

  1. সাধারণ ডায়াগনোসিস ধাপগুলিতে ব্যাখ্যা করা অনুযায়ী API মনিটরিং, ট্রেস টুল বা NGINX অ্যাক্সেস লগ ব্যবহার করে 500 Internal Server Error জন্য ফল্ট কোড , ফল্ট সোর্স এবং ফল্ট পলিসি নির্ধারণ করুন।
  2. যদি ফল্ট কোড protocol.http.BadFormData হয়, ফল্ট সোর্সের মান proxy বা policy হয় এবং ফল্ট পলিসি খালি না থাকে , তাহলে এটি নির্দেশ করে যে ফল্ট পলিসিতে উল্লেখিত পলিসিটি ফর্ম ডেটা (ফর্ম প্যারামিটার) পড়া বা নিষ্কাশন করার সময় ব্যর্থ হয়েছে।
  3. ফল্ট পলিসিতে উল্লিখিত নীতিটি পরীক্ষা করুন এবং নিম্নলিখিত তথ্যগুলি নির্ধারণ করুন:
    1. উৎস: পলিসিটি অনুরোধ বা প্রতিক্রিয়া থেকে ডেটা পড়ছে বা বের করছে কিনা তা নির্ধারণ করুন।
    2. ফর্ম প্যারামিটার: পলিসিতে যে নির্দিষ্ট ফর্ম প্যারামিটারগুলো পড়া হচ্ছে, তা নির্ধারণ করুন।

      নমুনা #১

      নমুনা #১: ExtractVariables পলিসি দ্বারা ফর্ম প্যারামিটার নিষ্কাশন:

            <ExtractVariables name="EV-ExtractFormParms">
               <DisplayName>EV-ExtractFormParams</DisplayName>
               <Source>request</Source>
               <FormParam name="username">
                  <Pattern ignoreCase="false">{username}</Pattern>
               </FormParam>
               <FormParam name="password">
                 <Pattern ignoreCase="false">{password}</Pattern>
               </FormParam>
               <VariablePrefix>forminfo</VariablePrefix>
             <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            </ExtractVariables>
            

      উপরের ExtractVariables পলিসিতে:

      • উৎস: request

        এটি <Source> এলিমেন্ট দ্বারা নির্দেশিত হয়।

      • ফর্মের প্যারামিটার: username এবং password

        <FormParam> এলিমেন্টের মধ্যে থাকা <Pattern> এলিমেন্ট দ্বারা এটি নির্দেশিত হয়।

      এর থেকে বোঝা যায় যে, ক্লায়েন্ট কর্তৃক Apigee Edge-এ পাঠানো HTTP অনুরোধের অংশ হিসেবে ব্যবহৃত username এবং/অথবা password ফর্ম প্যারামিটারগুলিতে এমন অক্ষর রয়েছে যা ব্যবহারের জন্য অনুমোদিত নয়

      নমুনা #২

      নমুনা #২: AssignMessage পলিসি দ্বারা ফর্ম প্যারামিটার কপি করা:

            <AssignMessage continueOnError="false" enabled="true" name="AM-CopyFormParams">
              <Copy source="request">
                <FormParams>
                  <FormParam name="username"/>
                  <FormParam name="password"/>
                </FormParams>
              </Copy>
              <AssignTo createNew="true" transport="http" type="request"/>
            </AssignMessage>
            

      উপরের ExtractVariables পলিসিতে:

      • উৎস: request

        এটি <Copy> এলিমেন্টের source অ্যাট্রিবিউট দ্বারা নির্দেশিত হয়।

      • ফর্মের প্যারামিটার: username এবং password

        <FormParam> এলিমেন্টের name অ্যাট্রিবিউট দ্বারা এটি নির্দেশিত হয়।

      এর থেকে বোঝা যায় যে, ক্লায়েন্ট কর্তৃক Apigee Edge-এ পাঠানো HTTP অনুরোধের অংশ হিসেবে ফর্ম প্যারামিটার username অথবা password অথবা উভয়টিতেই এমন কোনো অক্ষর রয়েছে যা ব্যবহার করার অনুমতি নেই

  4. নিম্নলিখিত পদ্ধতিগুলোর মধ্যে যেকোনো একটি ব্যবহার করে , ধাপ ৩- এ চিহ্নিত ফর্ম প্যারামিটারগুলোতে ব্যবহারের জন্য নিষিদ্ধ কোনো অক্ষর আছে কিনা তা পরীক্ষা করুন:

    ট্রেস টুল

    ট্রেস টুল ব্যবহার করে যাচাই করতে:

    1. আপনি যদি 'সাধারণ রোগনির্ণয় ধাপসমূহ' -এ বর্ণিত পদ্ধতি অনুযায়ী ব্যর্থ হওয়া অনুরোধটির ট্রেস সংগ্রহ করে থাকেন, তাহলে ব্যর্থ হওয়া অনুরোধগুলোর মধ্যে একটি নির্বাচন করুন।
    2. যদি আপনি নিশ্চিত হন যে উপরের ৩ নং ধাপে থাকা HTTP অনুরোধের ফর্ম প্যারামিটারগুলোতে এমন কোনো অক্ষর রয়েছে যা ব্যবহারের অনুমতি নেই , তাহলে
      1. "ক্লায়েন্টের কাছ থেকে অনুরোধ প্রাপ্ত" পর্যায়ে যান।
      2. নিচে স্ক্রল করে ফেজ ডিটেইলস সেকশনে যান এবং রিকোয়েস্ট কনটেন্ট পর্যালোচনা করুন।

        ( বড় ছবি দেখুন )

      3. উপরের উদাহরণে লক্ষ্য করুন যে, ফর্ম প্যারামিটার ' password এ পার্সেন্ট চিহ্ন ( % ) রয়েছে।
      4. যেহেতু শতাংশ চিহ্ন ( % ) বিশেষ অক্ষরগুলোকে শতাংশ এনকোড করার জন্যও ব্যবহৃত হয়, তাই এটিকে ফর্ম ডেটাতে সরাসরি ব্যবহার করা যাবে না।
      5. তাই, Apigee Edge 500 Internal Server Error এর সাথে protocol.http.BadFormData এরর কোডটি দিয়ে সাড়া দেয়।

    প্রকৃত অনুরোধ

    প্রকৃত অনুরোধ ব্যবহার করে যাচাই করতে:

    1. টার্গেট সার্ভারে করা আসল অনুরোধটি যদি আপনার কাছে না থাকে, তাহলে রেজোলিউশন- এ যান।
    2. আপনার কাছে Apigee Edge-এ করা আসল অনুরোধটির অ্যাক্সেস থাকলে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
      1. ফর্মের ডেটার বিষয়বস্তু পর্যালোচনা করুন এবং দেখুন এতে শতাংশ চিহ্ন ( % ) বা শতকরা চিহ্ন ( % ) এর মতো কোনো নিষিদ্ধ অক্ষর আছে কিনা। এর পরে অবৈধ হেক্সাডেসিমাল অক্ষর থাকে।

        নমুনা #১

        নমুনা অনুরোধ #১: অনুরোধের অংশ হিসেবে ফর্মের ডেটা

        curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=123456abc123&client_secret=c23578%ZY"
        

        এই উদাহরণে, লক্ষ্য করুন যে client_secret এলিমেন্টটিতে পার্সেন্ট চিহ্ন ( % ) এর পরে অবৈধ হেক্সাডেসিমাল অক্ষর ZY রয়েছে।

        নমুনা #২

        নমুনা অনুরোধ #২: ফাইলে পাঠানো ফর্ম ডেটা:

        curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d @form_data.xml
        

        form_data.xml-এর বিষয়বস্তু:

        xml=<user><username>abc1234@google.com</username><password>qwerty12345!@#$%</password></user>

        এই উদাহরণে, password উপাদানটি লক্ষ্য করুন। password এতে শতাংশ চিহ্ন ( % ) রয়েছে, যা ফর্ম ডেটাতে সরাসরি পাঠানো উচিত নয়।

    3. উপরের দুটি উদাহরণে, Apigee Edge-এ HTTP অনুরোধের অংশ হিসেবে পাঠানো ফর্ম ডেটাতে এমন কিছু অক্ষর রয়েছে যা ব্যবহার করার অনুমতি নেই
    4. তাই, Apigee Edge 500 Internal Server Error এর সাথে protocol.http.BadFormData এরর কোডটি দিয়ে সাড়া দেয়।

সমাধান

  1. ক্লায়েন্ট কর্তৃক HTTP অনুরোধের অংশ হিসেবে প্রেরিত ফর্ম ডেটা বা প্যারামিটারের কী (key) এবং ভ্যালু (value) উভয় ক্ষেত্রেই থাকা যেকোনো বিশেষ অক্ষর যেন 'ফর্ম ডেটা - application/x-www-form-urlencoded' অংশে ব্যাখ্যা করা অনুযায়ী সর্বদা এনকোড করা হয়, তা নিশ্চিত করুন।
  2. উপরে আলোচিত উদাহরণগুলোর ক্ষেত্রে, আপনি সমস্যাগুলো নিম্নোক্তভাবে সমাধান করতে পারেন:

    নমুনা #১

    নমুনা #১: অনুরোধের অংশ হিসেবে প্রদত্ত ফর্ম ডেটা:

    নির্দিষ্ট অক্ষরের ASCII কোডের সাথে মেলে এমন বৈধ হেক্সাডেসিমাল অক্ষর ব্যবহার করুন। উদাহরণস্বরূপ, আপনি যদি ডলার চিহ্ন ( $ ) পাঠাতে চান, তাহলে নিচে দেখানো অনুযায়ী %24 ব্যবহার করুন:

    curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=123456abc123&client_secret=c23578%24"
    

    নমুনা #২

    নমুনা অনুরোধ #২: ফাইলে পাঠানো ফর্ম ডেটা:

    curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d @form_data.xml
    

    form_data.xml-এর বিষয়বস্তু:

    শতাংশ ( % ) চিহ্নের জন্য পার্সেন্ট-এনকোডিং ব্যবহার করুন, অর্থাৎ ফাইলটি পরিবর্তন করে %25 করুন। %25 নীচে দেখানো হলো:

    xml=<user><username>abc1234@google.com</username><password>qwerty12345!!@#$%25</password></user>

স্পেসিফিকেশন

Apigee Edge আশা করে যে ফর্ম ডেটা নিম্নলিখিত স্পেসিফিকেশন অনুযায়ী পাঠানো হবে:

স্পেসিফিকেশন
ফর্ম ডেটা - অ্যাপ্লিকেশন/x-www-form-urlencoded

আপনার যদি এখনও Apigee Support-এর কাছ থেকে কোনো সাহায্যের প্রয়োজন হয়, তাহলে Must gather diagnostic information- এ যান।

রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে

উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যাটি থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge Support-এর সাথে যোগাযোগ করুন:

আপনি যদি পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্যগুলো প্রদান করুন:

  • সংস্থার নাম
  • পরিবেশের নাম
  • এপিআই প্রক্সি নাম
  • protocol.http.BadFormData এরর কোড সহ 500 Internal Server Error টি পুনরুৎপাদন করতে ব্যবহৃত সম্পূর্ণ curl কমান্ড।
  • এপিআই অনুরোধগুলির ট্রেস ফাইল

আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্যগুলো প্রদান করুন:

  • ব্যর্থ অনুরোধগুলির জন্য সম্পূর্ণ ত্রুটি বার্তা পরিলক্ষিত হয়েছে।
  • পরিবেশের নাম
  • এপিআই প্রক্সি বান্ডেল
  • এপিআই অনুরোধগুলির ট্রেস ফাইল
  • NGINX অ্যাক্সেস লগ

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

    যেখানে: ORG , ENV এবং PORT# প্রকৃত মান দ্বারা প্রতিস্থাপিত হয়।

  • মেসেজ প্রসেসর সিস্টেম লগ

    /opt/apigee/var/log/edge-message-processor/logs/system.log

তথ্যসূত্র