13.3. Zend_Http_Client - Á¢¼Ó ¾î´ðÅÍ

13.3.1. °³¿ä

Zend_Http_Client (Àº)´Â, Á¢¼Ó ¾î´ðÅͷμ­ ¼³°èµÇ°í ÀÖ½À´Ï´Ù. Á¢¼Ó ¾î´ðÅÍ´Â ½ÇÁ¦·Î ¼­¹ö¿¡ÀÇ Á¢¼ÓÀ» ½Ç½ÃÇÏ´Â ¿ÀºêÁ§Æ®·Î, ¸®Äù½ºÆ®³ª ¸®½ºÆù½ºÀÇ Ã³¸®µµ ½Ç½ÃÇÕ´Ï´Ù. ÀÌ Á¢¼Ó ¾î´ðÅÍ´Â ¿Å°Ü³õÀ» ¼ö ÀÖ½À´Ï´Ù. Áï, µðÆúÆ®ÀÇ Á¢¼Ó ¾î´ðÅ͸¦ °è½ÂÇØ ÀÚ½ÅÀÇ ÃëÇâ¿¡ ¸Âµµ·Ï(µíÀÌ) º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. HTTP Ŭ¶óÀÌ¾ðÆ® Å¬·¡½º Àüü¸¦ °íÃÄ ¾µ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. °°Àº ÀÎÅÍÆäÀ̽º¸¦ ½ÇÀåÇϰí ÀÖ´Â °Í¸¸À¸·Î ÁÁ½À´Ï´Ù.

ÇöÀç,Zend_Http_Client Ŭ·¡½º´Â ¼¼ °³ÀÇ ÆíÀÔ Á¢¼Ó ¾î´ðÅ͸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù.

  • Zend_Http_Client_Adapter_Socket ( µðÆúÆ®)

  • Zend_Http_Client_Adapter_Proxy

  • Zend_Http_Client_Adapter_Test

Zend_Http_Client ¿ÀºêÁ§Æ®ÀÇ Á¢¼Ó ¾î´ðÅ͸¦ ÁöÁ¤ÇÏ·Á¸é , ¼³Á¤ ¿É¼Ç 'adapter' (À»)¸¦ »ç¿ëÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¶§¿¡, ¿É¼Ç 'adapter' ¿¡ ¾î´ðÅÍÀÇ À̸§ ( ¿¹¸¦ µé¾î 'Zend_Http_Client_Adapter_Socket' µî) (À»)¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.ȤÀº, ¾î´ðÅÍ ¿ÀºêÁ§Æ®ÀÇ º¯¼ö ( ¿¹¸¦ µé¾î new Zend_Http_Client_Adapter_test µî) (À»)¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Zend_Http_Client->setConfig() ¸Þ¼Òµå¸¦ »ç¿ëÇØ, ¾î´ðÅ͸¦ ´ÙÀ½¿¡ ¼³Á¤ÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù.

13.3.2. ¼ÒÄÏ ¾î´ðÅÍ

µðÆúÆ®ÀÇ Á¢¼Ó ¾î´ðÅÍ´Â Zend_Http_Client_Adapter_Socket ÀÔ´Ï´Ù.¸í½ÃÀûÀ¸·Î Á¢¼Ó ¾î´ðÅ͸¦ ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì´Â, À̰ÍÀÌ »ç¿ëµË´Ï´Ù. Socket ¾î´ðÅÍ´Â PHP ÀÇ ÆíÀÔ ÇÔ¼ö fsockopen() (À»)¸¦ »ç¿ëÇϰí ÀÖ¾î, Ưº°ÇÑ È®Àå ¸ðµâÀ̳ª ÄÄÆÄÀÏ ¿É¼ÇÀº ÇÊ¿ä ¾ø½À´Ï´Ù.

¼ÒÄÏ ¾î´ðÅÍ¿¡¼­´Â, µ¶ÀÚÀûÀÎ ¼³Á¤ ¿É¼Ç 'ssltransport' ÇÏÁö¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù (Zend_Http_Client->setConfig() ¿¡ °Ç³×Áֵ簡, ȤÀº constructor¡¡ ¡¡ À¸·Î ¼³Á¤ÇÕ´Ï´Ù) . ÀÌ ÆÄ¶ó¹ÌÅÍ´Â ¹®ÀÚ¿­·Î, µðÆúÆ®´Â 'sslv2' µË´Ï´Ù. À̰ÍÀ» º¯°æÇϸé,HTTPS Á¢¼Ó¿¡ »ç¿ëÇÏ´Â ½ºÆ®¸² Æ®·£½ºÆ÷Æ®ÃþÀÌ º¯°æµË´Ï´Ù. ÀÚÁÖ(Àß) »ç¿ëÇÏ´Â °ªÀº 'ssl' ,'sslv2' ,'sslv3' ¹× 'tls' ÀÔ´Ï´Ù.À̿ܿ¡µµ, PHP ÇÏÁö¸¸ ¼­Æ÷Æ®Çϰí ÀÖ´Â ½ºÆ®¸² Æ®·£½ºÆ÷Æ®ÃþÀ̶ó¸é ¾î¶² °Í¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, °á°ú°¡ ¿¹±âÄ¡ ¸øÇÑ °ÍÀÌ µÉÁöµµ ¸ð¸¨´Ï´Ù.ÀÌ¿ÜÀÇ °ªÀ» »ç¿ëÇÏ´Â °æ¿ì¿¡´Â, ±×°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö¸¦ È®½ÇÈ÷ ÆÄ¾ÇÇÑ ´ÙÀ½ »ç¿ëÇϵµ·Ï ÇսôÙ. [2].

·Ê 13.15. HTTPS Æ®·£½ºÆ÷Æ®ÃþÀÇ º¯°æ


<?php
    
//  ¼³Á¤ ÆÄ¶ó¹ÌÅ͸¦ ÁöÁ¤ÇÕ´Ï´Ù
    
$config = array(
        
'adapter'      => 'Zend_Http_Client_Adapter_Socket',
        
'ssltransport' => 'tls'
    
);
    
    
//  Ŭ¶óÀÌ¾ðÆ® ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
    
$client Zend_Http_Client('https://www.example.com'$config);
    
    
//  ÀÌ ÀÌÈÄÀÇ ¸®Äù½ºÆ®´Â,TLS  ½ÃÅ¥¾î Á¢¼Ó»ó¿¡¼­ ÇàÇØÁý´Ï´Ù
    
$response $client->request();
?>

À§ÀÇ ¿¹ÀÇ °á°ú´Â, ´ÙÀ½ÀÇ PHP Ä¿¸àµå·Î TCP Á¢¼ÓÀ» ¿ÀÇÂÇßÀ» °æ¿ì¿Í °°°Ô µË´Ï´Ù.

fsockopen('tls://www.example.com', 443)

13.3.3. ÇÁ·Ï½Ã ¾î´ðÅÍ

Zend_Http_Client_Adapter_Proxy ¾î´ðÅÍ´Â µðÆúÆ®ÀÇ ¼ÒÄÏ ¾î´ðÅÍ¿Í °ÅÀÇ °°½À´Ï´Ù. ´Ù¸¸, ´ë»óÀÌ µÇ´Â ¼­¹ö¿¡ Á÷Á¢ Á¢¼ÓÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó HTTP ÇÁ·Ï½Ã ¼­¹ö¸¦ °æÀ¯ÇØ Á¢¼ÓÇÑ´Ù°í ÇÏ´Â Á¡ÀÌ ´Ù¸¨´Ï´Ù. À̰Ϳ¡ ÀÇÇØ,Zend_Http_Client (À»)¸¦ ÇÁ·Ï½Ã ¼­¹öÁß¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ½ÃÅ¥·¯Æ¼³ª ÆÛÆ÷¸Õ½º»óÀÇ ÀÌÀ¯¿¡ ÀÇÇØ, À̰ÍÀÌ ÇÊ¿äÇÑ °æ¿ìµµ ÀÖ°ÚÁö¿ä.

ÇÁ·Ï½Ã ¾î´ðÅ͸¦ »ç¿ëÇÏ·Á¸é , µðÆúÆ®ÀÇ 'adapter' ¿É¼Ç À̿ܿ¡ ¸î°³Àΰ¡ Ãß°¡ÀÇ ÆÄ¶ó¹ÌÅ͸¦ ¼³Á¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

Ç¥ 13.2. Zend_Http_Client ÀÇ ¼³Á¤ ÆÄ¶ó¹ÌÅÍ

ÆÄ¶ó¹ÌÅÍ ¼³¸í »óÁ¤Çϰí ÀÖ´Â ÇüÅ °ªÀÇ ¿¹
proxy_host ÇÁ·Ï½Ã ¼­¹öÀÇ ÁÖ¼Ò string 'proxy.myhost.com' ȤÀº '10.1.2.3'
proxy_port ÇÁ·Ï½Ã ¼­¹öÀÇ TCP Æ÷Åä integer 8080 ( µðÆúÆ®) ȤÀº 81
proxy_user Çʿ信 µû¶ó¼­, ÇÁ·Ï½ÃÀÇ À¯Àú¸í string 'shahar' ȤÀº ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì´Â '' ( µðÆúÆ®)
proxy_pass Çʿ信 µû¶ó¼­, ÇÁ·Ï½ÃÀÇ ÆÐ½º¿öµå string 'secret' ȤÀº ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì´Â '' ( µðÆúÆ®)
proxy_auth ÇÁ·Ï½ÃÀÇ HTTP ÀÎÁõ Çü½Ä string Zend_Http_Client::AUTH_BASIC ( µðÆúÆ®)

proxy_host (Àº)´Â Ç×»ó ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, ÀÚµ¿ÀûÀ¸·Î Zend_Http_Client_Adapter_Socket ¿¡ ÀÇÇÑ Á÷Á¢ Á¢¼Ó¿¡ ¹Ù²ò´Ï´Ù. proxy_port ÀÇ µðÆúÆ®´Â '8080' ÀÔ´Ï´Ù.¸¸¾à ´Ù¸¥ Æ÷Å並 ÇÁ·Ï½Ã·Î »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â, ÀûÀýÈ÷ ¼³Á¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

proxy_user ¹× proxy_pass (Àº)´Â, ÇÁ·Ï½Ã ¼­¹ö°¡ ÀÎÁõÀ» ÇÊ¿ä·Î ÇÏ´Â °æ¿ì¿¡°Ô¸¸ ¼³Á¤ÇÕ´Ï´Ù. À̰͵éÀ» ÁöÁ¤Çϸé,'Proxy-Authentication' Çì´õ°¡ ¸®Äù½ºÆ®¿¡ Ãß°¡µË´Ï´Ù.ÇÁ·Ï½Ã·Î ÀÎÁõÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â °æ¿ì´Â, ÀÌ µÎ ¿É¼ÇÀº ±×´ë·Î ÇØ µÓ´Ï´Ù.

proxy_auth (Àº)´Â, ÇÁ·Ï½Ã°¡ ÀÎÁõÀ» ÇÊ¿ä·Î Çϰí ÀÖ´Â °æ¿ì¿¡, ±× ÀÎÁõ Çü½ÄÀ» ÁöÁ¤ÇÕ´Ï´Ù.¼³Á¤ÇÒ ¼ö ÀÖ´Â °ªÀº Zend_Http_Client::setAuth() ¸Þ¼Òµå¿Í °°½À´Ï´Ù.ÇöÀç´Â º£ÀÌÁ÷ ÀÎÁõ (Zend_Http_Client::AUTH_BASIC) ¸¸À» ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù.

·Ê 13.16. ÇÁ·Ï½Ã ¼­¹ö¸¦ »ç¿ëÇß´Ù Zend_Http_Client ÀÇ »ç¿ë¹ý


<?php
    
//  Á¢¼Ó ÆÄ¶ó¹ÌÅ͸¦ ¼³Á¤ÇÕ´Ï´Ù
    
$config = array(
        
'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
        
'proxy_host' => 'proxy.int.zend.com',
        
'proxy_port' => 8000,
        
'proxy_user' => 'shahar.e',
        
'proxy_pass' => 'bananashaped'
    
);
    
    
//  Ŭ¶óÀÌ¾ðÆ® ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
    
$client Zend_Http_Client('http://www.example.com'$config);
    
    
//  ÀÛ¾÷À» °è¼ÓÇÕ´Ï´Ù...
?>

¼³¸íÇß´ø ´ë·Î, ¸¸¾à proxy_host (À»)¸¦ »ý·« Çϰųª °ø¹®ÀÚ¿­À» ¼³Á¤Çϰųª Çϸé, ÀÚµ¿ÀûÀ¸·Î Á÷Á¢ Á¢¼Ó¿¡ ¹Ù²ò´Ï´Ù.À̰Ϳ¡ ÀÇÇØ, ¼³Á¤ ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇØ¼­ ¿É¼ÇÀ¸·Î ÇÁ·Ï½Ã¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¾²´Â °ÍÀÌ °¡´ÉÇØÁý´Ï´Ù.

13.3.4. Å×½ºÆ® ¾î´ðÅÍ

HTTP Á¢¼Ó¿¡ ÀÇÁ¸ÇÏ´Â Å×½ºÆ® Äڵ带 ¾²´Â °ÍÀº ¸Å¿ì ¾î·Á¿î °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, ¸®¸ðÆ® ¼­¹ö·ÎºÎÅÍ RSS (À»)¸¦ ÃëµæÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» Å×½ºÆ®ÇÏ·Á¸é , ³×Æ®¿öÅ©·Î ¿¬°áµÇ¾î ÀÖÀ» Çʿ䰡 ÀÖ½À´Ï´Ù.Ç×»ó ³×Æ®¿öÅ©¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù.

ÀÌ·¯ÇÑ ¶§¸¦ À§Çؼ­ ÀÖ´Â °ÍÀÌ Zend_Http_Client_Adapter_Test ¾î´ðÅÍÀÔ´Ï´Ù. Zend_Http_Client (À»)¸¦ »ç¿ëÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇØ, ±×°ÍÀ» Å×½ºÆ®ÇÏ°í ½ÍÀº °æ¿ì¿¡´Â, µðÆúÆ®ÀÇ ¾î´ðÅ͸¦ Test ¾î´ðÅÍ ( ¸ñÅ©¿ÀºêÁ¦Å©Æ®) (À¸)·Î º¯°æÇÕ´Ï´Ù. À̰ÍÀ¸·Î, ¼­¹ö¿¡ Á¢¼ÓÇÏÁö ¾Ê°í Å×½ºÆ®¸¦ ½Ç½ÃÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

Zend_Http_Client_Adapter_Test ¿¡´Â setResponse() ±×·¸´Ù°í ÇÏ´Â ¸Þ¼Òµå°¡ ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ ÆÄ¶ó¹ÌÅÍ¿¡´Â,HTTP ¸®½ºÆù½º¸¦ ÅØ½ºÆ®Àΰ¡ Zend_Http_Response ¿ÀºêÁ§Æ®·Î ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸®½ºÆù½º¸¦ ¼³Á¤Çϸé,Test ¾î´ðÅÍ´Â Ç×»ó ÀÌ ¸®½ºÆù½º¸¦ µ¹·ÁÁÖ°Ô µË´Ï´Ù. ½ÇÁ¦ÀÇ HTTP ¸®Äù½ºÆ®´Â ½Ç½ÃÇÏÁö ¾Ê½À´Ï´Ù.

·Ê 13.17. HTTP ¸®½ºÆù½º ±×·çÅͱ⸦ »ç¿ëÇÑ Å×½ºÆ®


<?php
    
//  »õ·Î¿î ¾î´ðÅÍ¿Í Å¬¶óÀ̾ðÆ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
    
$adapter = new Zend_Http_Client_Adapter_Test();
    
$client Zend_Http_Client('http://www.example.com', array(
        
'adapter' => $adapter
    
));
    
    
//  »óÁ¤ÇÏ´Â ¸®½ºÆù½º¸¦ ¼³Á¤ÇÕ´Ï´Ù
    
$adapter->setResponse(
        
"HTTP/1.1 200 OK"        "rn" .
        
"Content-type: text/xml" "rn" .
                                   
"rn" 
        
'<?xml version="1.0" encoding="UTF-8"?>' 
        
'<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"' 
        
'     xmlns:wfw="http://wellformedweb.org/CommentAPI/"' 
        
'     xmlns:dc="http://purl.org/dc/elements/1.1/">' 
        
'  <channel>' 
        
'    <title>Premature Optimization</title>' 
        
//  µî µî...
        
'</rss>');
    
    
$response $client->request('GET');
    
// .. $response  ÀÇ Ã³¸®¸¦ °è¼ÓÇÕ´Ï´Ù...
?>

À§ÀÇ ¿¹ÀÇ °°°Ô Çϸé,HTTP Ŭ¶óÀÌ¾ðÆ®¿¡ ¼Ò¸ÁÀÇ ¸®½ºÆù½º¸¦ µ¹·ÁÁÖ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±× ¶§¿¡ ³×Æ®¿öÅ© Á¢¼ÓÀº »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù.¶Ç, ½ÇÁ¦ÀÇ ¼­¹ö·ÎºÎÅÍÀÇ ¸®½ºÆù½ºµµ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ °æ¿ì, ÀÌ Å×½ºÆ®·Î Å×½ºÆ®ÇÏ´Â °ÍÀº, ¸®½ºÆù½º º»¹®ÀÇ XML (À»)¸¦ ¾îÇø®ÄÉÀ̼ÇÀÌ ¿Ã¹Ù¸£°Ô ÆÛ½º ÇÒ ¼ö ÀÖÀ»±î ÇÏ´Â °ÍÀÔ´Ï´Ù.

½Ã°£¿¡´Â, ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ÇϳªÀÇ ¸Þ¼Òµå È£Ãâ Áß(¾È)¿¡¼­ º¹¼öÀÇ HTTP Æ®·£Àè¼Ç(transaction)¸¦ ½Ç½ÃÇϱ⵵ ÇϰÚÁö¿ä.±×·¯ÇÑ °æ¿ì´Â setResponse() (À»)¸¦ ´Üµ¶À¸·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.¿Ö³ÄÇϸé, °á°ú°¡ È£ÃâÇØ ¹ÙÅÁÀ¸·Î µÇµ¹¾Æ ¿Ã ¶§±îÁö ´ÙÀ½ÀÇ ¸®½ºÆù½º¸¦ ¼³Á¤ÇÒ ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù.

·Ê 13.18. º¹¼öÀÇ HTTP ¸®½ºÆù½º ±×·çÅͱ⸦ »ç¿ëÇÑ Å×½ºÆ®


<?php
    
//  »õ·Î¿î ¾î´ðÅÍ ¹× Ŭ¶óÀ̾ðÆ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
    
$adapter = new Zend_Http_Client_Adapter_Test();
    
$client Zend_Http_Client('http://www.example.com', array(
        
'adapter' => $adapter
    
));
    
    
//  ÃÖÃÊÀÇ ÀÀ´äÀ¸·Î¼­ ±â´ëÇÏ´Â °ªÀ» ¼³Á¤ÇÕ´Ï´Ù
    
$adapter->setResponse(
        
"HTTP/1.1 302 Found"      "rn" .
        
"Location: /"             "rn" .
        
"Content-Type: text/html" "rn" .
                                    
"rn" 
        
'<html>' 
        
'  <head><title>Moved</title></head>' .
        
'  <body><p>This page has moved.</p></body>' 
        
'</html>');

    
//  °Å±â¿¡ °è¼Ó µÇ´Â ¸®½ºÆù½º¸¦ ¼³Á¤ÇÕ´Ï´Ù
    
$adapter->addResponse(
        
"HTTP/1.1 200 OK"         "rn" .
        
"Content-Type: text/html" "rn" .
                                    
"rn" 
        
'<html>' 
        
'  <head><title>My Pet Store Home Page</title></head>' 
        
'  <body><p>...</p></body>' 
        
'</html>');

    
// HTTP  Ŭ¶óÀÌ¾ðÆ® ¿ÀºêÁ§Æ® ($client)  (À»)¸¦ Å×½ºÆ® ´ë»óÀÇ
    //  ¿ÀºêÁ§Æ®¿¡ ÁÖÀÔÇØ, ¿ÀºêÁ§Æ®ÀÇ ¿òÁ÷ÀÓÀ» ÀÌÇÏ·Î Å×½ºÆ®ÇÕ´Ï´Ù
?>

setResponse() ¸Þ¼Òµå´Â, Zend_Http_Client_Adapter_Test ÀÇ ¹öÆÛ¿¡ ÀÖ´Â ¸®½ºÆù½º¸¦ ¸ðµÎ »èÁ¦ÇØ, ÃÖÃÊ·Î µ¹·ÁÁÖ¾îÁö´Â ¸®½ºÆù½º¸¦ ¼³Á¤ÇÕ´Ï´Ù.addResponse() ¸Þ¼Òµå´Â, °Å±â¿¡ °è¼Ó µÇ´Â ¸®½ºÆù½º¸¦ Ãß°¡ÇÕ´Ï´Ù.

¸®½ºÆù½º´Â, ±×°ÍÀ» Ãß°¡ÇÑ ¼ø¼­¿¡ Àç»ýµË´Ï´Ù. µî·ÏÇß´ø °Íº¸´Ùµµ ¸¹Àº ¸®Äù½ºÆ®°¡ ¹ß»ýÇßÀ» °æ¿ì´Â, µ¹·ÁÁÖ¾îÁö´Â ¸®½ºÆù½º´Â ÃÖÃÊÀÇ °ÍÀ¸·Î µ¹¾Æ¿Í, °Å±â·ÎºÎÅÍ ¶Ç ¼ø¼­¿¡ µ¹·ÁÁÖ¾îÁö°Ô µË´Ï´Ù.

À§ÀÇ ¿¹·Î, ÀÌ ¾î´ðÅͰ¡ Å×½ºÆ®Çϵµ·Ï(µíÀÌ) ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀº, 302 ¸®µð·ºÆ®°¡ ¹ß»ýÇßÀ» °æ¿ìÀÇ ¿ÀºêÁ§Æ®ÀÇ °Åµ¿ÀÔ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀÇ ³»¿ë¿¡ ÀÇÇØ¼­, ¸®µð·ºÆ® ½ÃÄÑ¾ß ÇÏ´Â °ÍÀΰ¡ ±×·¸Áö ¾ÊÀº °ÍÀÎÁö´Â ´Ù¸£°ÚÁö¿ä. ÀÌ ¿¹¿¡¼­´Â ¸®µð·ºÆ® ½ÃŰ´Â °ÍÀ» »óÁ¤Çϰí ÀÖÀ¸¹Ç·Î, Å×½ºÆ® ¾î´ðÅ͵µ °Å±â¿¡ ¾Æ¿ï·¯ ¼³Á¤ÇØ ÀÖ½À´Ï´Ù. ÃÖÃÊÀÇ 302 ¸®½ºÆù½º¸¦ setResponse() ¸Þ¼Òµå·Î ¼³Á¤ÇØ, ´ÙÀ½¿¡ µ¹·ÁÁÖ¾îÁø´Ù 200 ¸®½ºÆù½º¸¦ addResponse() ¸Þ¼Òµå·Î ¼³Á¤ÇÕ´Ï´Ù. Å×½ºÆ® ¾î´ðÅ͸¦ ¼³Á¤ ³¡¸¶Ä¡¸é, ±× ¾î´ðÅ͸¦ Æ÷ÇÔÇÑ´Ù HTTP Ŭ¶óÀÌ¾ðÆ®¸¦ Å×½ºÆ® ´ë»ó ¿ÀºêÁ§Æ®¿¡ ÁÖÀÔÇØ, ±× °Åµ¿À» Å×½ºÆ®ÇÕ´Ï´Ù.

13.3.5. µ¶ÀÚÀûÀÎ Á¢¼Ó ¾î´ðÅÍÀÇ ÀÛ¼º

µ¶ÀÚÀûÀÎ Á¢¼Ó ¾î´ðÅ͸¦ ÀÛ¼ºÇØ, ±×°ÍÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î Áö¼ÓÀûÀÎ ¼ÒÄÏÀ» »ç¿ëÇÏ´Â ¾î´ðÅ͸¦ ÀÛ¼ºÇϰųª ij½¬ ±â´ÉÀ» Ãß°¡ÇÑ ¾î´ðÅ͸¦ ÀÛ¼ºÇϰųª, ÀÛ¼ºÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀÇ ¿ä°Ç¿¡ ¸ÂÃá °ÍÀ» ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.

±×·¯±â À§Çؼ­´Â,Zend_Http_Client_Adapter_Interface (À»)¸¦ ½ÇÀåÇÑ Å¬·¡½º¸¦ ÀÛ¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌÇÏÀÇ ¿¹´Â, À¯Àú Á¤ÀÇÀÇ ¾î´ðÅÍ Å¬·¡½ºÀÇ ¾ç½ÄÀÌ µË´Ï´Ù. ÀÌ ¿¹·Î Á¤ÀÇ ¶°³¯ ¼ö ÀÖ¾î ¸ðµç ÆÛºí¸¯ ÇÔ¼ö¸¦, ¾î´ðÅÍ·Î Á¤ÀÇÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

·Ê 13.19. µ¶ÀÚÀûÀÎ Á¢¼Ó ¾î´ðÅÍÀÇ ÀÛ¼º


<?php
class MyApp_Http_Client_Adapter_BananaProtocol implements Zend_Http_Client_Adapter_Interface
{    
    
/**
     *  ¾î´ðÅÍÀÇ ¼³Á¤ ¹è¿­À» ¼³Á¤ÇÑ´Ù
     *
     * @param array $config
     */
    
public function setConfig($config = array())
    {
        
//  ¿©±â´Â °ÅÀÇ º¯°æÇÒ °ÍÀº ¾ø½À´Ï´Ù -
        //  Åë»óÀº Zend_Http_Client_Adapter_Socket  ÀÇ ½ÇÀåÀ» Ä«ÇÇÇÕ´Ï´Ù
    
}
    
    
/**
     *  ¸®¸ðÆ® ¼­¹ö¿¡ Á¢¼ÓÇÑ´Ù
     *
     * @param string  $host
     * @param int     $port
     * @param boolean $secure
     */
    
public function connect($host$port 80$secure false)
    {
        
//  ¸®¸ðÆ® ¼­¹ö¿ÍÀÇ Á¢¼ÓÀ» È®¸³ÇÕ´Ï´Ù
    
}
    
    
/**
     *  ¸®Äù½ºÆ®¸¦ ¸®¸ðÆ® ¼­¹ö¿¡ ¼Û½ÅÇÑ´Ù
     *
     * @param string        $method
     * @param Zend_Uri_Http $url
     * @param string        $http_ver
     * @param array         $headers
     * @param string        $body
     * @return string Request as text
     */
    
public function write($method$url$http_ver '1.1'$headers = array(), $body '')
    {
        
//  ¸®Äù½ºÆ®¸¦ ¸®¸ðÆ® ¼­¹ö¿¡ ¼Û½ÅÇÕ´Ï´Ù.
        //  ÀÌ ÇÔ¼ö´Â, ¸®Äù½ºÆ® Àüü ( Çì´õ ¹× º»¹®)  (À»)¸¦ ¹®ÀÚ¿­·Î µ¹·ÁÁÝ´Ï´Ù.
    
}
    
    
/**
     *  ¼­¹ö·ÎºÎÅÍÀÇ ¸®½ºÆù½º¸¦ ÀоîµéÀδÙ
     *
     * @return string
     */
    
public function read()
    {
        
//  ¸®¸ðÆ® ¼­¹ö·ÎºÎÅÍÀÇ ¸®½ºÆù½º¸¦ Àоîµé¿©, ±×°ÍÀ» ¹®ÀÚ¿­·Î µ¹·ÁÁÝ´Ï´Ù.
    
}
    
    
/**
     *  ¼­¹ö¿ÍÀÇ Á¢¼ÓÀ» ´Ý´Â´Ù
     *
     */
    
public function close()
    {
        
//  ¸®¸ðÆ® ¼­¹ö¿ÍÀÇ Á¢¼ÓÀ» ´Ý½À´Ï´Ù.¸¶Áö¸·¿¡ ÄÝ µË´Ï´Ù.
    
}
}    

//  ±×¸®°í, ÀÌ ¾î´ðÅ͸¦ »ç¿ëÇÕ´Ï´Ù
$client = new Zend_Http_Client(array(
    
'adapter' => 'MyApp_Http_Client_Adapter_BananaProtocol'
));


[2] PHP ¸Þ´º¾óÀÇ ºÎ·Ï O ¿¡, ¼­Æ÷Æ®µÇ´Â ¼ÒÄÏ Æ®·£½ºÆ÷Æ®ÀÇ À϶÷ÀÌ ÀÖ½À´Ï´Ù. http://www.php.net/manual/en/transports.php