স্থানীয় ভার্চুয়াল হোস্টগুলি ব্যবহার করতে সিআরএল সেট করুন


115

অ্যাপাচি বা এনগনিক্স ব্যবহার করে আমি সবসময় বাস্তব প্রকল্পগুলির উপর ভিত্তি করে বিকাশ সাইটগুলি তৈরি করি http://project1.locযা আমার .hostsফাইলে যুক্ত করার পরে ব্রাউজারটি ব্যবহার করতে কোনও সমস্যা হয় না has

যাইহোক, যখন আমি http://project1.loc/post.jsonসেই একই ইউআরএলটিতে সিআরএল অনুরোধ ( ) করার চেষ্টা করি তখন আমি কখনই সময়সীমা ছাড়াই পাই না। আমি ধরে নিচ্ছি যে সিআরএল আমার কাস্টম হোস্টগুলিকে যত্ন করে না এবং সরাসরি এটির তথ্যের জন্য একটি নাম সার্ভারে যায়।

আমি এটা কিভাবে ঠিক করবো?

আপডেট করুন আমি একটি কাস্টম শিরোনাম "HOST: http: //project1.loc " সেট করেছি এবং এখন আমি 400 টি ত্রুটি পাচ্ছি - তবে তারা তাত্ক্ষণিক তাই আমি ধরে নিচ্ছি যে সিআরএল কমপক্ষে হোস্ট ফাইলটি ব্যবহার করছে ...

উত্তর:


428

আসলে, কার্লের এর জন্য স্পষ্টভাবে একটি বিকল্প রয়েছে: --resolve

পরিবর্তে curl -H 'Host: yada.com' http://127.0.0.1/something

ব্যবহার curl --resolve 'yada.com:80:127.0.0.1' http://yada.com/something

কি পার্থক্য, আপনি জিজ্ঞাসা?

অন্যদের মধ্যে এটি এইচটিটিপিএসের সাথে কাজ করে। আপনার স্থানীয় সার্ভারের শংসাপত্র রয়েছে বলে ধরে নেওয়া yada.com, উপরের প্রথম উদাহরণটি ব্যর্থ হবে কারণ yada.comশংসাপত্রটি 127.0.0.1ইউআরএলে হোস্টনামের সাথে মেলে না ।

দ্বিতীয় উদাহরণটি এইচটিটিপিএসের সাথে সঠিকভাবে কাজ করে।

সংক্ষেপে, "হোস্ট" শিরোনামটি দিয়ে যাওয়ার মাধ্যমে -Hআপনার হোস্টকে শিরোলেখীর সেটটি হ্যাক করে, তবে কার্লের সমস্ত হোস্ট-নির্দিষ্ট বুদ্ধি বাইপাস করে। --resolveপ্রযোজ্য সমস্ত সাধারণ লজিকের উপার্জনগুলি ব্যবহার করে , তবে ডিএনএস অনুসন্ধানটি কেবল আপনার কমান্ড-লাইন বিকল্পে ডেটা ফেরত দেয় pre এটি ঠিক মত কাজ করে /etc/hosts

নোটটি --resolveএকটি বন্দর নম্বর নেয়, তাই আপনি HTTPS ব্যবহার করবেন

curl --resolve 'yada.com:443:127.0.0.1' https://yada.com/something


26
এটি আমাকে হত্যা করছে - কেউ দয়া করে এটি সঠিক উত্তর হিসাবে চিহ্নিত করতে পারেন? এটি উত্তরের চেয়ে নতুনতর, সুতরাং ভোট নেই .. তবে গৃহীত উত্তরটি ভুল (যেমন শুধুমাত্র কিছু নির্দিষ্ট পরিস্থিতিতে কাজ করে) = (
জন হার্ট

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

10
উল্লেখ্য যে --resolve কেবল কার্ল 7.২১.৩ এ যুক্ত হয়েছিল - আপনি যদি কোনও পুরানো হোস্ট (যেমন উবুন্টু ১০.০৪ এলটিএস) এর সাথে আটকে থাকেন তবে -H 'হোস্ট ...' বিকল্পটি এখনও কার্যকর ফলব্যাক।
কেন

9
আমি সম্মত হওয়ার পরে এটি সম্ভবত গ্রহণযোগ্য উত্তর হওয়া উচিত (এবং ওপি যদি এর বিপরীতে পরিবর্তন করে তবে আমি অবশ্যই অপরাধ গ্রহণ করব না), আমার উত্তরটি ভুল না বলে বলে: এটি সেই সময়ে উপলব্ধ সংস্করণগুলির জন্য সঠিক প্রশ্নোত্তর তৈরি হয়েছিল সুতরাং যে ব্যবহারকারীরা আপনাকে প্রথম উত্তরের অতীত পড়তে বিরক্ত করতে পারে না এবং তাদের টাইমস্ট্যাম্পগুলির উপর ভিত্তি করে উত্তরগুলি মূল্যায়ন করতে পারে তা কখনই সেরা সহায়তা পাবে না ...
ব্রুনো

1
দুঃখিত, ব্রুনো, কোনও অপরাধ বোঝানো হয়নি।
জন হার্ট

120

সম্পাদনা: এটি বর্তমানে গৃহীত উত্তর হিসাবে গ্রহণ করা হলেও পাঠকরা এই প্রয়োজনীয় উত্তরটি ব্যবহারকারী জন হার্টের প্রয়োজন অনুসারে আরও খাপ খাইয়ে নিতে পারেন। এটি একটি বিকল্প ব্যবহার করে যা ব্যবহারকারী কেন অনুসারে 7.২১.৩ সংস্করণে প্রবর্তিত হয়েছিল (যা ২০১০ সালের ডিসেম্বরে প্রকাশিত হয়েছিল , এই প্রাথমিক উত্তরের পরে)।


আপনার সম্পাদিত প্রশ্নে আপনি URL টি হোস্ট নাম হিসাবে ব্যবহার করছেন, তবে এটির জন্য কেবল হোস্টের নাম হওয়া দরকার।

চেষ্টা করুন:

curl -H 'Host: project1.loc' http://127.0.0.1/something

যেখানে project1.locহয় মাত্র হোস্টনেম এবং 127.0.0.1লক্ষ্য আইপি ঠিকানা।

(আপনি একটি লাইব্রেরি থেকে এবং কমান্ড লাইনে এই কার্ল ব্যবহার করেন, তাহলে নিশ্চিত করুন যে আপনি রাখি না করতে http://মধ্যে Hostহেডার।)


1
আমি পিএইচপি দিয়ে 400 ত্রুটি পেয়েছি এবং যখন আমি নিজে নিজে কার্ল.এক্সে দিয়ে অনুরোধ করব তখন আমি সার্ভারের ডিফল্ট সূচক পাই যার অর্থ এটি শিরোনামকে সম্মান করে না HOST
জিওনক্রস

আমি এটি ভার্চুয়াল হোস্টগুলির সাথে বিভিন্ন সার্ভারে চেষ্টা করেছি এবং এটি কাজ করে (কমান্ড লাইন থেকে)। শুধু ক্ষেত্রে Hostনা চেষ্টা করুন HOST(যদিও আমি মনে করি এটি কেস-সংবেদনশীল হওয়া উচিত নয়)। যেমনটি আমি বলেছি, নিশ্চিত করুন যে আপনি কেবল Hostশিরোনামে হোস্টনামটি ব্যবহার করছেন , অন্য কিছুই নয় ( পরে নেই http://এবং নেই /something)। আপনি কীভাবে আপনার হোস্ট ফাইল সেট আপ করলেন?
ব্রুনো

নীচে এটি করার ফলাফল সম্পর্কে আরও ডেটা পোস্ট করেছেন।
জিওনক্রস

1
ব্রুনো যেমন নীচে বলেছিল, অনুরোধটি সম্ভবত এটি তৈরি করছে এবং একটি 403 ত্রুটি পেয়েছে বলে সমস্যাটি সম্ভবত আমার সার্ভার কনফিগারেশনের।
জিওনক্রস

আমি হোস্ট ফাইলটিতে "127.0.0.1" myvirtualhost.localhost "মিস করেছি তাই সমস্যাটি আছে।
অরবিন্দ কে।

2

হয় সত্যিকারের সম্পূর্ণরূপে যোগ্যতাসম্পন্ন ডোমেন নাম ব্যবহার করুন (যেমন dev.yourdomain.com) যা 127.0.0.1সঠিক হোস্ট ফাইল (সাধারণত / ইত্যাদি / হোস্ট * নিক্স পরিবেশে) সম্পাদনা করার চেষ্টা করে।


আমি উইন্ডোজ ব্যবহার করে বিকাশ করিsystem32/drivers/etc/hosts
জিয়নক্রস

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

আমি উইন্ডোজগুলির জন্য পিএইচপি 5.3 এর সাথে অন্তর্ভুক্ত নেটিভ উইন্ডোজ বিল্ডটি ব্যবহার করছি (পিএইচপি_ফেসটাকি হিসাবে চলমান)।
জিওনক্রস

2

দেখে মনে হচ্ছে এটি কোনও অস্বাভাবিক সমস্যা নয়।

পরীক্ষা করে দেখুন এই প্রথম।

যদি এটি সাহায্য না করে, আপনি যেমন উইন্ডোজ, উপর একটি স্থানীয় DNS সার্ভার ইনস্টল করতে পারেন এই । ডিএনএস সার্ভার হিসাবে লোকালহোস্ট ব্যবহার করতে উইন্ডোজকে কনফিগার করুন। এই সার্ভারটি আপনার যে কোনও জাল ডোমেনের প্রয়োজন হিসাবে অনুমোদনযোগ্য এবং অন্য সমস্ত অনুরোধগুলির জন্য প্রকৃত ডিএনএস সার্ভারগুলিতে অনুরোধগুলি ফরোয়ার্ড করার জন্য কনফিগার করা যেতে পারে।

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


আপনি দয়া করে নিজের উত্তরটি পড়তে এবং এটি আবার লিখতে পারেন? তৃতীয় লাইনে ইংরেজদের কোনও বুদ্ধি নেই!
ওমরথম্যান

Tidied। জিৎ, অনুমান করুন আমি খুব দ্রুত এটি টাইপ করেছি সঠিকভাবে না পড়ে।
ম্যাট

1

সার্ভারটি কি আসলে অনুরোধগুলি পেয়েছে এবং আপনি কি হোস্টের নাম (ওরফে) সঠিকভাবে পরিচালনা করছেন?

আমার .hosts ফাইল যোগ করার পরে

অনুরোধটি কীভাবে এসেছিল তা দেখতে, আপনার ওয়েবসারভার লগটি পরীক্ষা করুন ...

কার্লের কাছে অনুরোধ প্রেরিত ডাম্প করার বিকল্প রয়েছে এবং প্রাপ্ত প্রতিক্রিয়াটিকে এটিকে ট্রেস বলা হয়, যা কোনও ফাইলে সংরক্ষণ করা হবে।

--trace

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

আমি কমান্ড লাইনে কাজ করার অনুরোধ করব এবং তারপরে পিএইচপি-তে প্রয়োগ করার চেষ্টা করব।

কনফিগারেশন বিকল্পটি

-K / - কনফিগ

কার্লের সাথে প্রাসঙ্গিক বিকল্পগুলি এখানে

--trace প্রদত্ত আউটপুট ফাইলটিতে বর্ণনামূলক তথ্য সহ সমস্ত ইনকামিং এবং আউটগোয়িং ডেটার একটি সম্পূর্ণ ট্রেস ডাম্প সক্ষম করে। স্ট্যান্ডআউটে আউটপুট প্রেরণের জন্য ফাইলের নাম হিসাবে "-" ব্যবহার করুন।

      This option overrides previous uses of -v/--verbose or --trace-ascii.

      If this option is used several times, the last one will be used.

-K / - কনফিগারেশন থেকে কার্ল আর্গুমেন্টগুলি পড়ার জন্য কোন কনফিগার ফাইলটি নির্দিষ্ট করে। কনফিগার ফাইলটি একটি পাঠ্য ফাইল যাতে কমান্ড লাইনের আর্গুমেন্টগুলি লেখা যেতে পারে যা তখন ব্যবহার করা হবে যেমন সেগুলি আসল কমান্ড লাইনে লেখা হয়েছিল। বিকল্পগুলি এবং তাদের প্যারামিটারগুলি একই কনফিগার ফাইল লাইনটিতে অবশ্যই হোয়াইটস্পেস, কোলন, সমান চিহ্ন বা এর কোনও সংমিশ্রণ দ্বারা পৃথক করা আবশ্যক (তবে, পছন্দসই পৃথক পৃথক চিহ্নটি সমান চিহ্ন)। যদি প্যারামিটারটিতে সাদা স্থান থাকতে হয় তবে প্যারামিটারটি উদ্ধৃতিতে আবদ্ধ থাকতে হবে। ডাবল উদ্ধৃতিতে, নিম্নলিখিত অব্যাহতি ক্রমগুলি উপলব্ধ: \, \ ", \ t, \ n, \ r এবং \ v। অন্য কোনও অক্ষরের পূর্ববর্তী একটি ব্যাকস্ল্যাশ উপেক্ষা করা হয় If চরিত্র, রেখাটির বাকী অংশটি একটি মন্তব্য হিসাবে বিবেচিত হবে।

      Specify the filename to -K/--config as '-' to make curl read the file from stdin.

      Note that to be able to specify a URL in the config file, you need to specify it using the --url option, and not by simply writing the URL on its own line. So, it could look similar to this:

      url = "http://curl.haxx.se/docs/"

      Long option names can optionally be given in the config file without the initial double dashes.

      When curl is invoked, it always (unless -q is used) checks for a default config file and uses it if found. The default config file is checked for in the following places in this order:

      1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on UNIX-like systems (which  returns  the  home  dir
      given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\Application Data'.

      2)  On windows, if there is no _curlrc file in the home dir, it checks for one in the same dir the curl executable is placed. On UNIX-like systems, it will simply try to load .curlrc from the deter-
      mined home dir.

      # --- Example file ---
      # this is a comment
      url = "curl.haxx.se"
      output = "curlhere.html"
      user-agent = "superagent/1.0"

      # and fetch another URL too
      url = "curl.haxx.se/docs/manpage.html"
      -O
      referer = "http://nowhereatall.com/"
      # --- End of example file ---

      This option can be used multiple times to load multiple config files.

আবার, আমি উইন্ডোজ পিএইচপি ব্যবহার করছি একই উইন্ডোতে এনজিঙ্কস চলমান একটি ভোস্টে একটি পৃষ্ঠা আনতে। যাইহোক, আমি একটি http://domain.loc/users/getSettings.xmlভোস্টের কাছে একটি অনুরোধ করেছি এবং এটিই অ্যাক্সেস.লগ দেখিয়েছে 127.0.0.1 - - [09/Aug/2010:11:42:55 -0500] "POST /users/getSettings.xml HTTP/1.1" 499 0 "-" "-"এবং কার্ল রিপোর্ট করেছে Operation timed out after 10000 milliseconds with 0 bytes received তাই আমার ধারণা যে অ্যাক্সেস.লগ অনুরোধটি দেখায় তাই সিআরএল আসলে ভোস্ট পরিচালনা করছে। তারপরে, এটি এখন এটি সঠিক ডোমেনে পরিণত করছে ...
জিয়নক্রস

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

আপনি কি কমান্ড লাইন কার্লটি যুক্ত করে যুক্ত করেছেন - যাতে আপনি পোস্টটি নিয়ন্ত্রণ করতে এবং সার্ভারের প্রতিক্রিয়া দেখতে পান?
জর্জ ল্যামবার্ট

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

1
আপনি এখান থেকে উইন্ডোজের জন্য কার্লের কমান্ড লাইন সংস্করণটি ডাউনলোড করতে পারেন curl.haxx.se/download.html
জর্জ ল্যামবার্ট

1

একটি অনুরোধ করা

C:\wnmp\curl>curl.exe --trace-ascii -H 'project1.loc' -d "uuid=d99a49d846d5ae570
667a00825373a7b5ae8e8e2" http://project1.loc/Users/getSettings.xml

এতে থাকা -Hলগ ফাইলটিতে প্রতিক্রিয়া জানানো হয়েছে :

== Info: Could not resolve host: 'project1.loc'; Host not found
== Info: Closing connection #0
== Info: About to connect() to project1.loc port 80 (#0)
== Info:   Trying 127.0.0.1... == Info: connected
== Info: Connected to project1.loc (127.0.0.1) port 80 (#0)
=> Send header, 230 bytes (0xe6)
0000: POST /Users/getSettings.xml HTTP/1.1
0026: User-Agent: curl/7.19.5 (i586-pc-mingw32msvc) libcurl/7.19.5 Ope
0066: nSSL/1.0.0a zlib/1.2.3
007e: Host: project1.loc
0092: Accept: */*
009f: Content-Length: 45
00b3: Content-Type: application/x-www-form-urlencoded
00e4: 
=> Send data, 45 bytes (0x2d)
0000: uuid=d99a49d846d5ae570667a00825373a7b5ae8e8e2
<= Recv header, 24 bytes (0x18)
0000: HTTP/1.1 403 Forbidden
<= Recv header, 22 bytes (0x16)
0000: Server: nginx/0.7.66
<= Recv header, 37 bytes (0x25)
0000: Date: Wed, 11 Aug 2010 15:37:06 GMT
<= Recv header, 25 bytes (0x19)
0000: Content-Type: text/html
<= Recv header, 28 bytes (0x1c)
0000: Transfer-Encoding: chunked
<= Recv header, 24 bytes (0x18)
0000: Connection: keep-alive
<= Recv header, 25 bytes (0x19)
0000: X-Powered-By: PHP/5.3.2
<= Recv header, 56 bytes (0x38)
0000: Set-Cookie: SESSION=m9j6caghb223uubiddolec2005; path=/
<= Recv header, 57 bytes (0x39)
0000: P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
<= Recv header, 2 bytes (0x2)
0000: 
<= Recv data, 118 bytes (0x76)
0000: 6b
0004: <html><head><title>HTTP/1.1 403 Forbidden</title></head><body><h
0044: 1>HTTP/1.1 403 Forbidden</h1></body></html>
0071: 0
0074: 
== Info: Connection #0 to host project1.loc left intact
== Info: Closing connection #0

আমার হোস্ট ফাইলটি দেখে মনে হচ্ছে:

# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost
...
...
127.0.0.1   project1.loc

1
-Hসম্পূর্ণ শিরোনামের জন্য, কেবল হোস্ট নয়, তাই ব্যবহার করুন -H 'Host: project1.loc'। তদুপরি, এই সমস্যা সত্ত্বেও, এই অনুরোধটি সঠিক হোস্টে কাজ করছে বলে মনে হচ্ছে ( hostsকমপক্ষে কমান্ড লাইনে কার্ল করে আপনার ফাইল থেকে সঠিকভাবে প্রাপ্ত )। কি কাজ করছে না (403) প্রমাণীকরণ / অনুমোদনের সমস্যার মতো মনে হচ্ছে, তাই আপনার সার্ভারটি এই অনুরোধগুলি অবরুদ্ধ করছে। আমি এটির জন্য সার্ভার কনফিগারেশন ঠিক করার পরামর্শ দেব
ব্রুনো

0

অ্যাপাচি HTTP- সার্ভারগুলিতে ভার্চুয়াল হোস্টগুলি সেট আপ করার জন্য যা এখনও ডিএনএসের মাধ্যমে সংযুক্ত নয়, আমি এটি ব্যবহার করতে চাই:

curl -s --connect-to ::host-name: http://project1.loc/post.json

যেখানে হোস্ট-নামটি আইপি ঠিকানা বা ওয়েব-সার্ভার চলছে সেই মেশিনের ডিএনএস নাম। এটি https- সাইটগুলির জন্যও ভাল কাজ করে।


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