ฉันวางแผนที่จะใช้ PHP สำหรับข้อกำหนดที่เรียบง่าย ฉันต้องดาวน์โหลดเนื้อหา XML จาก URL ซึ่งฉันต้องส่งคำขอ HTTP GET ไปยัง URL นั้น
ฉันจะทำใน PHP ได้อย่างไร
ฉันวางแผนที่จะใช้ PHP สำหรับข้อกำหนดที่เรียบง่าย ฉันต้องดาวน์โหลดเนื้อหา XML จาก URL ซึ่งฉันต้องส่งคำขอ HTTP GET ไปยัง URL นั้น
ฉันจะทำใน PHP ได้อย่างไร
คำตอบ:
file_get_contents
ถ้าคุณต้องการมากกว่าเพียงแค่เนื้อหาของไฟล์ที่คุณสามารถใช้
$xml = file_get_contents("http://www.example.com/file.xml");
failed to open stream: HTTP request failed!
file_get_contents
ไม่อนุญาตให้คุณส่งคำขอด้วยคุกกี้ที่กำหนดเองส่วนหัวและอื่น ๆ ที่เบราว์เซอร์จะส่งโดยทั่วไปดังนั้นคุณอาจไม่ได้รับคำตอบที่ต้องการ ในกรณีนี้คุณควรใช้ CURL ดีกว่า ( แต่ที่ไม่ได้กรณีของ OP.)
สำหรับคำขอ 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);
file_get_contents()
มาก สตริงตัวอักษร 4 ตัวที่เรียบง่ายใช้เวลาประมาณ 10 วินาทีในขณะที่ขดจะมีความเหมาะสมสูงสุด ~ 1 วินาที
http_get
ควรทำเคล็ดลับ ข้อดีของการใช้http_get
เกินfile_get_contents
ความสามารถในการดูส่วนหัว HTTP รายละเอียดการร้องขอการเข้าถึงและควบคุมการหมดเวลาการเชื่อมต่อ
$response = http_get("http://www.example.com/file.xml");
จำไว้ว่าถ้าคุณใช้พรอกซีคุณต้องทำอะไรเล็กน้อยในรหัส 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;
?>
ขึ้นอยู่กับว่าการตั้งค่า php ของคุณอนุญาตให้ fopen บน URL หรือไม่คุณสามารถ fopen url ด้วยอาร์กิวเมนต์รับในสตริงได้ (เช่นhttp://example.com?variable=value )
แก้ไข: Re-อ่านคำถามผมไม่แน่ใจว่าคุณกำลังมองหาที่จะผ่านตัวแปรหรือไม่ - ถ้าคุณไม่ได้คุณก็สามารถส่งคำขอ fopen containg http://example.com/filename.xml - รู้สึกฟรี เพื่อละเว้นตัวแปร = ส่วนที่เป็นค่า
ฉันชอบใช้ fsockopen เปิดสำหรับสิ่งนี้
ในทางกลับกันการใช้ REST API ของเซิร์ฟเวอร์อื่นเป็นที่นิยมอย่างมากใน PHP สมมติว่าคุณกำลังมองหาวิธีที่จะเปลี่ยนเส้นทางคำร้องขอ 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();
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();