কীভাবে পিএইচপি থেকে জিইটি অনুরোধ প্রেরণ করবেন?


280

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

আমি পিএইচপি এ কীভাবে করব?

উত্তর:


378

আপনার কেবলমাত্র ফাইলের বিষয়বস্তুর চেয়ে বেশি প্রয়োজন না হলে আপনি ব্যবহার করতে পারেন file_get_contents

$xml = file_get_contents("http://www.example.com/file.xml");

আরও জটিল কোনও কিছুর জন্য আমি সিআরএল ব্যবহার করব


3
এটি সঠিক, যদি না আপনার ক্যোয়ারিং স্ট্রিং পরামিতি ব্যবহার করার প্রয়োজন হয়।
র‌্যাপটার

2
@ মিউজিকফ্রিয়াক: সুরক্ষা সেটিংসের জন্য কিছু সার্ভার দ্বারা ক্যোয়ারী স্ট্রিংটিকে কখনও কখনও উপেক্ষা করা হয়। এছাড়াও, ক্রস-সার্ভার ক্যোয়ারির ফলে এই ত্রুটি হতে পারে:failed to open stream: HTTP request failed!
র‌্যাপ্টর

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

1
কার্ল ফাইল_জেট_কন্টেন্টের চেয়ে আরও দ্রুত। উচ্চ ট্র্যাফিক পরিবেশে ফাইল_জেট_অন্টেন্টের চেয়ে কার্ল পছন্দ করুন
দেব

2
@ সাশা - আমি অনেক উত্পাদন পরিবেশে এটির মুখোমুখি হয়েছি তবে আপনি এই লিঙ্কগুলি আপাতত দেখতে পেলেন : haltiko.blogspot.com/2013/02/… বা mdb9.wordpress.com/2011/03/06/…
দেব

132

আরও উন্নত জিইটি / পোষ্ট অনুরোধগুলির জন্য আপনি সিআরএল লাইব্রেরি ইনস্টল করতে পারেন ( http://us3.php.net/curl ):

$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);

10
যদিও "সরল প্রয়োজন", +১ এর জন্য সিআরএল ব্যবহার করার দরকার নেই, কারণ এটি পিএইচপি-তে এইচটিটিপি অনুরোধের সাথে আরও উন্নত কিছু করার জন্য সেরা সমাধান।
xyz

ইতিমধ্যে উল্লিখিত হিসাবে, কার্ল তুলনায় অনেক দ্রুত file_get_contents()। একটি সহজ 4 অক্ষরের স্ট্রিং এটির সাথে প্রায় 10 সেকেন্ড সময় নিয়েছিল, যখন কার্ল আরও যুক্তিসঙ্গত ~ 1 সেকেন্ডের সর্বাধিক গ্রহণ করেছে।
পিটার গর্ডন

@pgmann আপনি কি সেই ফলাফলের বিষয়ে নিশ্চিত? যা উদ্ধৃত হয়েছে তার সাথে অন্যান্য পরিসংখ্যানের সাথে এটি মিলছে না। আসলে, সিআরএল দ্রুত, তবে এটি এত দ্রুত হওয়া উচিত নয়। প্রতিক্রিয়া সময় হতে পারে এই ড্রপটি কিছু সংস্থান ইত্যাদির সার্ভার-সাইড ক্যাচিং থেকে এসেছে? আপনি পরীক্ষা আবার করা উচিত?
রুনি লিলিমেটস

1
@ রৌনি আমি আশঙ্কা করছি আমি আর পরীক্ষা করতে পারব না তবে আমি সবসময় গতি বৃদ্ধি ইত্যাদির জন্য সিআরএল নিয়ে যাই etc. অনুরোধের সময়গুলি আনুমানিক হয়, পৃষ্ঠাটি লোড করার সময় এটি কেমন অনুভূত হয়েছিল। আমি একাধিকবার চেষ্টা করেছি
পিটার গর্ডন

63

http_getকৌতুক করা উচিত। http_getওভারের সুবিধাগুলির মধ্যে file_get_contentsএইচটিটিপি শিরোনাম দেখার ক্ষমতা, অনুরোধের বিশদটি অ্যাক্সেস করা এবং সংযোগের সময়সীমা নিয়ন্ত্রণ করা অন্তর্ভুক্ত।

$response = http_get("http://www.example.com/file.xml");

83
এইচটিপি এক্সটেনশন পিএইচপি দিয়ে বান্ডিল হয় না এবং প্রায়শই ভাগ করা হোস্টগুলিতে পাওয়া যায় না।
ইমরান

27
এর জন্য pecl_http> = 0.1.0 প্রয়োজন, যা ডিফল্টরূপে ইনস্টল করা হয় না।
র‌্যাপটার

5
"আপনি যে ম্যানুয়াল পৃষ্ঠাটি সন্ধান করছেন ( us2.php.net/manual/en/function.http-get.php ) এই সার্ভারে এখনই উপলভ্য নয়" "
পাইং

20

মনে রাখবেন যে আপনি যদি কোনও প্রক্সি ব্যবহার করেন তবে আপনার পিএইচপি কোডে আপনাকে কিছু কৌশল করতে হবে:

(PROXY WITHOUT AUTENTICATION EXAMPLE)

<?php
$aContext = array(
    'http' => array(
        'proxy' => 'proxy:8080',
        'request_fulluri' => true,
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;
?>

9

আপনার পিএইচপি সেটআপটি ইউআরএলগুলিতে ফপেনকে অনুমতি দেয় কিনা তার উপর নির্ভর করে আপনি স্ট্রিং-এ আর্গুমেন্টগুলি (যেমন http://example.com?variable=value হিসাবে ) সহ ইউআরএলটি কেবল ফপেন করতে পারেন on

সম্পাদনা: প্রশ্নটি পুনরায় পড়ার সাথে সাথে আমি নিশ্চিত নই যে আপনি ভেরিয়েবলগুলি পাস করার সন্ধান করছেন কিনা - আপনি যদি না হন তবে আপনি কেবল http://example.com/filename.xml এর সংক্ষেপে ফোপেন অনুরোধটি পাঠাতে পারেন - নিখরচায় পরিবর্তনশীল = মান অংশ অবহেলা



5

অন্যদিকে, অন্যান্য সার্ভারগুলির REST এপিআই ব্যবহার করে পিএইচপি তে খুব জনপ্রিয়। মনে করুন আপনি কিছু সার্ভারে HTTP অনুরোধগুলি পুনর্নির্দেশের কোনও উপায় সন্ধান করছেন (উদাহরণস্বরূপ একটি এক্সএমএল ফাইল পাওয়া)। আপনাকে সহায়তা করার জন্য এখানে একটি পিএইচপি প্যাকেজ রয়েছে:

https://github.com/romanpitak/PHP-REST-Client

সুতরাং, এক্সএমএল ফাইলটি পাওয়া:

$client = new Client('http://example.com');
$request = $client->newRequest('/filename.xml');
$response = $request->getResponse();
echo $response->getParsedResponse();

5

গুজল একটি অতি পরিচিত লাইব্রেরি যা এটি এইচটিটিপি কল সব ধরণের করা অত্যন্ত সহজ করে তোলে। Https://github.com / ধাঁধা / গজল দেখুন । ইনস্টল করুন composer require guzzlehttp/guzzleএবং চালান composer install। এইচটিপি কল কল করার জন্য এখন নীচের কোডটি যথেষ্ট।

$client = new \GuzzleHttp\Client();
$response = $client->get('https://example.com/path/to/resource');

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