পিএইচপি ফাইল_জেট_কন্টেন্টস () এবং সেটিংসের অনুরোধ শিরোনাম


121

পিএইচপি দিয়ে, এটি দিয়ে কি এইচটিটিপি শিরোনাম প্রেরণ করা সম্ভব? file_get_contents() কি ?

আমি জানি আপনি আপনার php.iniফাইল থেকে ব্যবহারকারী এজেন্ট প্রেরণ করতে পারেন । যাইহোক, যদি আপনি যেমন হিসাবে অন্যান্য তথ্য পাঠাতে পারে HTTP_ACCEPT, HTTP_ACCEPT_LANGUAGEএবং HTTP_CONNECTIONসঙ্গেfile_get_contents() ?

বা অন্য কোন ফাংশন রয়েছে যা এটি সম্পাদন করবে?

উত্তর:


319

আসলে, ফাংশনটিতে আরও পড়ার পরে file_get_contents():

// Create a stream
$opts = [
    "http" => [
        "method" => "GET",
        "header" => "Accept-language: en\r\n" .
            "Cookie: foo=bar\r\n"
    ]
];

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);

আপনি যা চাইছেন তা অর্জন করতে আপনি এই প্যাটার্নটি অনুসরণ করতে সক্ষম হতে পারেন, যদিও আমি ব্যক্তিগতভাবে এটি পরীক্ষা করেছি না। (এবং যদি এটি কাজ না করে তবে আমার অন্য উত্তরটি পরীক্ষা করে দেখুন)



18
এটি এই পৃষ্ঠায় একমাত্র দরকারী উত্তর
গর্ডন

9
আমি আশা করি এখানে আরও বেশি লোক কেবল সিআরএল পৃষ্ঠায় নির্দেশ না করে এই প্রশ্নের প্রকৃত উত্তর দেবেন। ধন্যবাদ।
মেরিজন

3
হঠাৎ কৌতূহল: এর ডিফল্ট ব্যবহারকারী এজেন্ট file_get_contents()কী? এটি একটি নির্দিষ্ট করে?
র‌্যাপ্টর

5
@ র‌্যাপ্টর ইউজার-এজেন্ট.মে ini_set('user_agent', 'SomeBrowser v42.0.4711');যান এবং সেখান থেকে আপনার অনুলিপি করুন .. বা বিশ্বব্যাপী এটি পরিবর্তন করতে php.ini সম্পাদনা করুন
জাগডসফট

88

আমার জন্য যা কাজ করেছে তা এখানে (ডোমিনিক কেবল একটি লাইন সংক্ষিপ্ত ছিল)।

$url = "";

$options = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n" .  // check function.stream-context-create on php.net
              "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad 
  )
);

$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);

6
আপনার কোনও ব্রাউজারের ব্যবহারকারী এজেন্টটির ছদ্মবেশ তৈরি করা উচিত নয়। পরিবর্তে, আপনার সরঞ্জামটির জন্য একটি ব্যবহারকারী-এজেন্ট স্ট্রিং তৈরি করুন। www-archive.mozilla.org/build/revised-user-agent-strings.html ফর্ম্যাট সম্পর্কে কিছু ধারণা দিতে পারে।
ডেরিকসন

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

3
@ ভ্যান্স পিএইচপি ডক্স জানিয়েছে যে উভয়ই ব্যবহার করা যেতে পারে এবং উভয় নির্দিষ্ট করা থাকলে "ব্যবহারকারী-এজেন্ট" অ্যারের উপাদানটিকে headerওভাররাইড করে user_agent
মিঃ হোয়েট

দ্রষ্টব্য: characters n বা \ r এর মতো বিশেষ অক্ষরযুক্ত স্ট্রিং সহ একক উদ্ধৃতি ব্যবহার করবেন না। পিএইচপি তাদের সঠিকভাবে ব্যাখ্যা করবে না এবং শিরোনামগুলি প্রেরণের ক্ষেত্রে আপনার শিরোনামগুলি সঠিকভাবে প্রেরণ করবে না।
ak93

1
@Fanky সবচেয়ে সহজ হতে পারে "আপনার কুল / 1.0.0"। আপনি যখন একটি নতুন সংস্করণ প্রকাশ করেন, আপনি ব্যবহারকারী-এজেন্ট সংস্করণটিকেও "আপনারটুল / ১.৩.৫" বাম্প করতে পারেন।
ডেরিকসন

39

আপনি পরে প্রতিক্রিয়া শিরোনাম পুনরুদ্ধার করতে এই পরিবর্তনকটি ব্যবহার করতে পারেন file_get_contents()ফাংশনের ।

কোড:

  file_get_contents("http://example.com");
  var_dump($http_response_header);

আউটপুট:

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}

6
এটি মোটেই প্রশ্নের উত্তর দেয় না।
গর্ডন

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

0

হ্যাঁ.

file_get_contentsএকটি ইউআরএল কল করার সময় , একটি ব্যবহার করা উচিতstream_create_context ফাংশনটি , যা php.net এ মোটামুটি ডকুমেন্টেড।

এটি ব্যবহারকারীর মন্তব্য বিভাগে php.net- এ নীচের পৃষ্ঠাতে কম-বেশি কভার করা হয়েছে: http://php.net/manual/en/function.stream-context-create.php


-1

পিএইচপি সিআরএল লাইব্রেরি ব্যবহার করা সম্ভবত সম্ভবত সঠিক উপায় হবে কারণ এই লাইব্রেরিতে সাধারণের চেয়ে আরও বেশি বৈশিষ্ট্য রয়েছে file_get_contents(...)

একটি উদাহরণ:

<?php
$ch = curl_init();
$headers = array('HTTP_ACCEPT: Something', 'HTTP_ACCEPT_LANGUAGE: fr, en, da, nl', 'HTTP_CONNECTION: Something');

curl_setopt($ch, CURLOPT_URL, "http://localhost"); # URL to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); # return into a variable
curl_setopt($ch, CURLOPT_HTTPHEADER, $header ); # custom headers, see above
$result = curl_exec( $ch ); # run!
curl_close($ch);
?>

5
আপনার প্রদর্শিত স্নিপেটটি file_get_contentsপাশাপাশি অর্জন করা সহজ এবং আমি এখনও ব্যবহারের কেসটি দেখতে পেলাম যা আপনি কেবল সিআরএল দিয়ে অর্জন করতে পারবেন।
গর্ডন

-1

আপনার যদি এইচটিটিপিএসের প্রয়োজন না হয় এবং আপনার সিস্টেমে কার্ল উপলব্ধ না আপনি ব্যবহার করতে পারেন could fsockopen

এই ফাংশনটি এমন একটি সংযোগ খোলে যা থেকে আপনি উভয়ই পড়তে এবং লিখতে পারেন যেমন আপনি একটি সাধারণ ফাইল হ্যান্ডেলটি করতে পারেন।


2
হ্যাঁ, তবে এর অর্থ হ'ল ওপিকে হাত থেকে এইচটিটিপি প্রোটোকলটি প্রয়োগ করতে হবে। এছাড়াও, ওপি বিকল্পগুলির বিষয়ে জিজ্ঞাসা করেনি file_get_contentsতাই এটি কিছুটা অফ-টপিক উত্তর।
গর্ডন

-3

দুর্ভাগ্যক্রমে, এটি দেখতে file_get_contents()সত্যিই নিয়ন্ত্রণের ডিগ্রিটি দেয় না । সিআরএল এক্সটেনশানটি সাধারণত প্রথম উপস্থিত হয় তবে খুব সহজ এবং সোজা এইচটিটিপি অনুরোধের জন্য আমি PECL_HTTP এক্সটেনশনের ( http://pecl.php.net/package/pecl_http ) সুপারিশ করব । (সিআরএল-এর চেয়ে বেশি কাজ করা সহজ)

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