ฉันต้องการเพิ่มความคิดเห็นเกี่ยวกับคำตอบของ Fred Tanrikut ฉันรู้ว่าพวกเขาส่วนใหญ่เขียนไว้แล้วในคำตอบข้างต้น แต่ฉันคิดว่ามันเป็นความคิดที่ดีที่จะแสดงคำตอบที่รวมพวกเขาทั้งหมดเข้าด้วยกัน
นี่คือคลาสที่ฉันเขียนเพื่อสร้างคำร้องขอ HTTP-GET / POST / PUT / DELETE ตาม curl ซึ่งเกี่ยวข้องกับเนื้อหาการตอบสนอง:
class HTTPRequester {
/**
* @description Make HTTP-GET call
* @param $url
* @param array $params
* @return HTTP-Response body or an empty string if the request fails or is empty
*/
public static function HTTPGet($url, array $params) {
$query = http_build_query($params);
$ch = curl_init($url.'?'.$query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
/**
* @description Make HTTP-POST call
* @param $url
* @param array $params
* @return HTTP-Response body or an empty string if the request fails or is empty
*/
public static function HTTPPost($url, array $params) {
$query = http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
/**
* @description Make HTTP-PUT call
* @param $url
* @param array $params
* @return HTTP-Response body or an empty string if the request fails or is empty
*/
public static function HTTPPut($url, array $params) {
$query = \http_build_query($params);
$ch = \curl_init();
\curl_setopt($ch, \CURLOPT_RETURNTRANSFER, true);
\curl_setopt($ch, \CURLOPT_HEADER, false);
\curl_setopt($ch, \CURLOPT_URL, $url);
\curl_setopt($ch, \CURLOPT_CUSTOMREQUEST, 'PUT');
\curl_setopt($ch, \CURLOPT_POSTFIELDS, $query);
$response = \curl_exec($ch);
\curl_close($ch);
return $response;
}
/**
* @category Make HTTP-DELETE call
* @param $url
* @param array $params
* @return HTTP-Response body or an empty string if the request fails or is empty
*/
public static function HTTPDelete($url, array $params) {
$query = \http_build_query($params);
$ch = \curl_init();
\curl_setopt($ch, \CURLOPT_RETURNTRANSFER, true);
\curl_setopt($ch, \CURLOPT_HEADER, false);
\curl_setopt($ch, \CURLOPT_URL, $url);
\curl_setopt($ch, \CURLOPT_CUSTOMREQUEST, 'DELETE');
\curl_setopt($ch, \CURLOPT_POSTFIELDS, $query);
$response = \curl_exec($ch);
\curl_close($ch);
return $response;
}
}
ปรับปรุง
- การใช้ http_build_query เพื่อดึงเคียวรีสตริงออกจาก request-array (คุณสามารถใช้อาร์เรย์เองได้ดังนั้นโปรดดู: http://php.net/manual/en/function.curl-setopt.php )
- ส่งคืนการตอบสนองแทนที่จะสะท้อนกลับ Btw คุณสามารถหลีกเลี่ยงการส่งคืนได้โดยลบบรรทัดcurl_setopt ($ ch, CURLOPT_RETURNTRANSFER จริง) . หลังจากนั้นค่าส่งคืนจะเป็นบูลีน (คำขอจริง = สำเร็จแล้วมิฉะนั้นจะเกิดข้อผิดพลาดขึ้น) และการตอบสนองจะถูกสะท้อนกลับ ดู: http://php.net/en/manual/function.curl-exec.php
- ปิดเซสชั่นที่สะอาดและลบขดจัดการโดยใช้curl_close ดู: http://php.net/manual/th/function.curl-close.php
- การใช้ค่าบูลีนสำหรับฟังก์ชั่นcurl_setoptแทนที่จะใช้ตัวเลขใด ๆ (ฉันรู้ว่าหมายเลขใด ๆ ที่ไม่เท่ากับศูนย์ก็ถือว่าเป็นจริงเช่นกัน แต่การใช้งานจริงสร้างรหัสที่อ่านได้มากขึ้น
- ความสามารถในการโทร HTTP-PUT / DELETE (มีประโยชน์สำหรับการทดสอบบริการที่สงบ)
ตัวอย่างการใช้งาน
GET
$response = HTTPRequester::HTTPGet("http://localhost/service/foobar.php", array("getParam" => "foobar"));
โพสต์
$response = HTTPRequester::HTTPPost("http://localhost/service/foobar.php", array("postParam" => "foobar"));
PUT
$response = HTTPRequester::HTTPPut("http://localhost/service/foobar.php", array("putParam" => "foobar"));
ลบ
$response = HTTPRequester::HTTPDelete("http://localhost/service/foobar.php", array("deleteParam" => "foobar"));
การทดสอบ
นอกจากนี้คุณยังสามารถทำการทดสอบการบริการที่ยอดเยี่ยมโดยใช้คลาสง่าย ๆ นี้
class HTTPRequesterCase extends TestCase {
/**
* @description test static method HTTPGet
*/
public function testHTTPGet() {
$requestArr = array("getLicenses" => 1);
$url = "http://localhost/project/req/licenseService.php";
$this->assertEquals(HTTPRequester::HTTPGet($url, $requestArr), '[{"error":false,"val":["NONE","AGPL","GPLv3"]}]');
}
/**
* @description test static method HTTPPost
*/
public function testHTTPPost() {
$requestArr = array("addPerson" => array("foo", "bar"));
$url = "http://localhost/project/req/personService.php";
$this->assertEquals(HTTPRequester::HTTPPost($url, $requestArr), '[{"error":false}]');
}
/**
* @description test static method HTTPPut
*/
public function testHTTPPut() {
$requestArr = array("updatePerson" => array("foo", "bar"));
$url = "http://localhost/project/req/personService.php";
$this->assertEquals(HTTPRequester::HTTPPut($url, $requestArr), '[{"error":false}]');
}
/**
* @description test static method HTTPDelete
*/
public function testHTTPDelete() {
$requestArr = array("deletePerson" => array("foo", "bar"));
$url = "http://localhost/project/req/personService.php";
$this->assertEquals(HTTPRequester::HTTPDelete($url, $requestArr), '[{"error":false}]');
}
}