PHP से GET रिक्वेस्ट कैसे भेजें?


280

मैं एक साधारण आवश्यकता के लिए PHP का उपयोग करने की योजना बना रहा हूं। मुझे URL से XML सामग्री डाउनलोड करने की आवश्यकता है, जिसके लिए मुझे उस URL पर HTTP GET अनुरोध भेजना होगा।

मैं इसे PHP में कैसे करूँ?

जवाबों:


378

जब तक आपको फ़ाइल की सामग्री से अधिक की आवश्यकता नहीं है, तब तक आप उपयोग कर सकते हैं file_get_contents

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

कुछ अधिक जटिल के लिए, मैं CURL का उपयोग करूंगा ।


3
यह सही है, जब तक आपको क्वेरी स्ट्रिंग मापदंडों का उपयोग करने की आवश्यकता नहीं है।
रैप्टर

2
@musicfreak: क्वेरी स्ट्रिंग को सुरक्षा सेटिंग्स के लिए कभी-कभी कुछ सर्वरों द्वारा अनदेखा किया जाता है। इसके अलावा, क्रॉस-सर्वर क्वेरी के परिणामस्वरूप यह त्रुटि हो सकती है:failed to open stream: HTTP request failed!
Raptor

26
@ शिवानप्रिय: मुझे यकीन नहीं है कि आप किस बारे में बात कर रहे हैं ... क्वेरी स्ट्रिंग स्ट्रिंग का सिर्फ एक हिस्सा है। कोई कारण नहीं है कि कोई सर्वर इसे अनदेखा करेगा। अब, जाहिर है, file_get_contentsआप कस्टम कुकीज़, हेडर, और अन्य चीजों के साथ अनुरोध नहीं करते हैं जो एक ब्राउज़र आमतौर पर भेजता है, इसलिए आपको वह प्रतिक्रिया नहीं मिल सकती है जिसकी आप तलाश कर रहे थे। उस स्थिति में, आप वैसे भी CURL का उपयोग करने से बेहतर होंगे। (लेकिन यह ओपी का मामला नहीं है।)
साशा चेडेगोव

1
कर्ल file_get_contents की तुलना में अधिक तेज़ है। एक उच्च ट्रैफ़िक वातावरण में फ़ाइल_गेट_ कॉन्टेंट्स पर कर्ल को प्राथमिकता दें
देब

2
@ साशा - मैंने कई उत्पादन परिवेशों में इसका सामना किया है, लेकिन आप अभी के लिए ये लिंक देख सकते हैं: haltiko.blogspot.com/2013/02/… या mdb9.wordpress.com/2011/03/06/…
Deb

132

अधिक उन्नत GET / POST अनुरोधों के लिए, आप CURL लाइब्रेरी ( 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
यद्यपि वास्तव में "सरल आवश्यकता" के लिए CURL का उपयोग करने की कोई आवश्यकता नहीं है, +1, क्योंकि यह PHP में HTTP अनुरोधों के साथ और अधिक उन्नत करने के लिए वास्तव में सबसे अच्छा समाधान है।
xyz

जैसा कि पहले ही उल्लेख किया गया है, कर्ल की तुलना में बहुत तेज है file_get_contents()। एक साधारण 4 लेटर स्ट्रिंग ने इसके साथ लगभग 10 सेकंड का समय लिया, जबकि कर्ल ने अधिक उचित ~ 1 सेकंड अधिकतम लिया।
पीटर गॉर्डन

@pgmann क्या आप उस परिणाम में सुनिश्चित हैं? यह अन्य आँकड़ों के अनुरूप नहीं है जिन्हें उद्धृत किया गया है। वास्तव में, CURL तेज़ है, लेकिन यह उतना तेज़ नहीं होना चाहिए। शायद प्रतिक्रिया समय में यह गिरावट कुछ संसाधन, आदि के सर्वर-साइड कैशिंग से आई है? शायद आपको परीक्षण दोहराना चाहिए?
रौनी लिलेमेट्स

1
@Rauni मुझे डर है कि मैं पीछे नहीं हट सकता, लेकिन मैं हमेशा स्पीड बढ़ाने के लिए cURL के साथ जाता हूं, आदि अनुरोध समय अनुमानित हैं, पेज लोड करते समय ऐसा क्या महसूस हुआ। मैंने कई बार कोशिश की।
पीटर गॉर्डन

63

http_getचाल चलनी चाहिए। http_getओवर के फायदों में file_get_contentsHTTP हेडर देखने, अनुरोध विवरणों तक पहुंचने और कनेक्शन टाइमआउट को नियंत्रित करने की क्षमता शामिल है।

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

83
http विस्तार PHP के साथ बंडल नहीं है और अक्सर साझा होस्ट में उपलब्ध नहीं है।
इमरान

27
इसके लिए pecl_http> = 0.1.0 की आवश्यकता है, जो डिफ़ॉल्ट रूप से स्थापित नहीं है।
रैप्टर

5
"जो मैनुअल पेज आप देख रहे हैं ( us2.php.net/manual/en/function.http-get.php ) अभी इस सर्वर पर उपलब्ध नहीं है।"
पैंग

20

याद रखें कि यदि आप एक प्रॉक्सी का उपयोग कर रहे हैं, तो आपको अपने php कोड में थोड़ा सा ट्रिक करने की आवश्यकता है:

(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

इस बात पर निर्भर करता है कि आपका php सेटअप URL पर फ़ोपेन की अनुमति देता है या नहीं, आप स्ट्रिंग में प्राप्त तर्कों (जैसे http://example.com?variable=value ) के साथ केवल url को फ़ोपेन कर सकते हैं

संपादित करें: सवाल मैं कुछ आप चर या नहीं पारित करने के लिए देख रहे हैं कि क्या नहीं कर रहा हूँ फिर से पढ़ने - अगर आप नहीं तो आप बस containg fopen अनुरोध भेज सकते हैं कर रहे हैं http://example.com/filename.xml - के लिए स्वतंत्र महसूस चर = मान भाग को अनदेखा करना


5

मुझे इसके लिए फॉक्सोपेन ओपन का उपयोग करना पसंद है।


5

दूसरी ओर, PHP में अन्य सर्वर के REST एपीआई का उपयोग करना बहुत लोकप्रिय है। मान लीजिए कि आप कुछ HTTP रिक्वेस्ट को दूसरे सर्वर में रीडायरेक्ट करने का तरीका ढूंढ रहे हैं (उदाहरण के लिए xml फ़ाइल प्राप्त करना)। यहाँ एक PHP पैकेज आपकी मदद करने के लिए है:

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

तो, xml फ़ाइल प्राप्त करना:

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

5

Guzzle एक बहुत अच्छी तरह से ज्ञात पुस्तकालय है जो HTTP कॉल के सभी प्रकारों को करना बहुत आसान बनाता है। Https://github.com/guzzle/guzzle देखें । साथ स्थापित करें composer require guzzlehttp/guzzleऔर चलाएं composer install। अब http कोड कॉल के लिए नीचे दिया गया कोड पर्याप्त है।

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

echo $response->getStatusCode();
echo $response->getBody();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.