2010-05-21 64 views

回答

1

AFAIK,cURL是PHP推薦到另一個API的推薦方式。可能還有其他的方法,但cURL內置於PHP來處理這種情況,所以爲什麼不使用它?

2

從PHP 4.3和PHP 5開始,您還可以使用stream_context_create()fopen()/file_get_contents()聯合進行POST請求。

完整的POST示例是here

至於哪個更好,我從來沒有見過一個PHP安裝帶有捲曲支持沒有編譯。但看到它needs an external library和流上下文方法不對,一個可以認爲後者是更好的選擇用於便攜式應用。

CURL仍然是更靈活的工具,並且有更多的選擇和功能。但是,如果只需要POST請求,我會使用內置的方式。

1

我最近回答了similar question,提供了一個基本的POST'able實現既file_get_contents()和捲曲的和一些基準應該幫助你決定。

已經提到cURL需要libcurl擴展,並且在某些服務器上file_get_contents()可能無法請求遠程文件allow_url_fopen設置爲Off

您必須選擇哪一個最適合您,我通常使用以下函數,如果cURL不可用,則返回file_get_contents()

function Request($url, $post = null) 
{ 
    if (extension_loaded('curl') === true) 
    { 
     $curl = curl_init($url); 

     if (is_resource($curl) === true) 
     { 
      curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
      curl_setopt($curl, CURLOPT_FAILONERROR, true); 
      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

      if (isset($post) === true) 
      { 
       curl_setopt($curl, CURLOPT_POST, true); 
       curl_setopt($curl, CURLOPT_POSTFIELDS, (is_array($post) === true) ? http_build_query($post, '', '&') : $post); 
      } 

      $result = curl_exec($curl); 
     } 

     curl_close($curl); 
    } 

    else 
    { 
     $http = array 
     (
      'method' => 'GET', 
      'user_agent' => $_SERVER['HTTP_USER_AGENT'], 
     ); 

     if (isset($post) === true) 
     { 
      $http['method'] = 'POST'; 
      $http['header'] = 'Content-Type: application/x-www-form-urlencoded'; 
      $http['content'] = (is_array($post) === true) ? http_build_query($post, '', '&') : $post; 
     } 

     $result = @file_get_contents($url, false, stream_context_create(array('http' => $http))); 
    } 

    return $result; 
} 
相關問題