首頁 > 後端開發 > php教程 > PHP主|使用捲曲來遠程請求

PHP主|使用捲曲來遠程請求

William Shakespeare
發布: 2025-02-23 10:14:18
原創
502 人瀏覽過

態如果您是Linux用戶,那麼您可能已經使用了捲髮。這是一個強大的工具,用於從發送電子郵件到下載最新的《我的小馬匹》字幕。在本文中,我將解釋如何在PHP中使用捲曲擴展。該擴展名為我們提供了PHP舒適世界中的主機實用程序的功能。我將討論發送和發布請求,處理登錄cookie和FTP功能。 在開始之前,請確保您安裝了擴展名(和libcurl庫)。默認情況下不安裝它。在大多數情況下,可以使用系統的軟件包管理器安裝它,但是除非您可以在PHP手冊中找到說明。

鑰匙要點

  • curl是一種功能強大的工具,用於從發送電子郵件到下載字幕的各種任務,可以通過提供與控制台實用程序相同的功能的擴展。
  • curl可用於檢索網頁,登錄網站,使用FTP並發送多個請求。例如,您可以通過發送帶有特定詳細信息的發布請求來模擬登錄到WordPress驅動的網站。
  • 使用兩個函數簡化了
  • 故障排除捲曲請求:curl_getinfo()和curl_error()。這些功能提供了有關頻道以及請求期間可能發生的任何錯誤的詳細信息。
  • 捲曲是一種進行遠程調用的高效且強大的工具,使其非常適合訪問外部API或爬行等任務。它提供了一個用戶友好的界面和請求相對容易執行。
  • >
  • 如何工作?
> 所有捲曲請求遵循相同的基本模式:

首先,我們通過調用curl_init()函數來初始化捲曲資源(通常為“ curl hander”> ch> ch
    )。
  1. 接下來,我們將設置各種選項,例如URL,請求方法,有效負載數據等。可以使用Curl_setopt()單獨設置選項,或者我們可以將選項數組傳遞到Curl_setopt_array()。 然後,我們通過調用curl_exec()。 >執行請求
  2. 最後,我們釋放了資源以清除內存。
  3. >
  4. 因此,用於提出請求的樣板代碼看起來像這樣:
  5. 為請求而更改的唯一一件事是設置了哪些選項,哪些選項當然取決於您對捲髮的工作。
  6. 檢索網頁
  7. 我能想到的最基本的示例是僅獲取網頁的內容。因此,讓我們以BBC的主頁為例。
  8. 檢查瀏覽器中的輸出,您應該看到顯示的BBC網站。我們很幸運,因為該站點的顯示正確,因為它的絕對鏈接到樣式表和圖像。 我們剛剛使用的選項是:
<span><span><?php
</span></span><span><span>// init the resource
</span></span><span><span>$ch = curl_init();
</span></span><span>
</span><span><span>// set a single option...
</span></span><span><span>curl_setopt($ch, OPTION, $value);
</span></span><span><span>// ... or an array of options
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>OPTION1 => $value1,
</span></span><span><span>OPTION2 => $value2
</span></span><span><span>));
</span></span><span>
</span><span><span>// execute
</span></span><span><span>$output = curl_exec($ch);
</span></span><span>
</span><span><span>// free
</span></span><span><span>curl_close($ch);</span></span>
登入後複製
登入後複製
登入後複製
登入後複製
curlopt_url - 指定請求

的URL

  • > curlopt_returntransfer - 設置false時,curl_exec()根據請求的成功返回true或false。設置為true時,curl_exec()返迴響應的內容。
  • >登錄到網站

    捲髮執行了檢索BBC頁面的GET請求,但是Curl也可以使用其他方法,例如POST和PUT。在此示例中,讓我們模擬登錄以WordPress為動力的網站。登錄是通過將POST請求發送到>的登錄名來完成: 登錄 - 用戶名
      >
    • > PWD - 密碼
    • redirect_to - 登錄
    • >之後我們要轉到的URL
    • > TestCookie - 應將其設置為1(僅適用於WordPress) 當然,這些參數對每個站點都有特定。您應該始終自己檢查輸入名稱,這可以通過查看瀏覽器中的HTML頁面的來源很容易完成。
    • 新選項是:
    > curlopt_post - 如果要發送郵政請求
    <span><span><?php
    </span></span><span><span>// init the resource
    </span></span><span><span>$ch = curl_init();
    </span></span><span>
    </span><span><span>// set a single option...
    </span></span><span><span>curl_setopt($ch, OPTION, $value);
    </span></span><span><span>// ... or an array of options
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>OPTION1 => $value1,
    </span></span><span><span>OPTION2 => $value2
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>// execute
    </span></span><span><span>$output = curl_exec($ch);
    </span></span><span>
    </span><span><span>// free
    </span></span><span><span>curl_close($ch);</span></span>
    登入後複製
    登入後複製
    登入後複製
    登入後複製
    ,請設置此true
      > curlopt_postfields - 將在請求正文中發送的數據
    • >
    • curlopt_followlocation - 如果設置為true,則curl將遵循重定向
    • 哦!但是,如果您測試上述內容,則會看到一個錯誤消息:“錯誤:cookie被瀏覽器阻止或不支持。您必須允許cookie使用WordPress。”這是正常的,因為我們需要啟用cookie才能工作。我們通過添加兩個選項來做到這一點。
    • 新選項是:
    > curlopt_cookiesession-如果設置為true,curl將啟動新的cookie會話,而忽略任何以前
    <span><span><?php
    </span></span><span><span>curl_setopt_array(
    </span></span><span><span>$ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>$output = curl_exec($ch);
    </span></span><span><span>echo $output;</span></span>
    登入後複製
    登入後複製
    > curlopt_cookiejar - 這是文件的名稱,其中curl應保存cookie信息。確保您有正確寫入文件的權限!
      >
    • 現在我們已登錄,我們只需要引用cookie文件以獲取後續請求。
    • 與FTP
    • 一起工作 使用Curl通過FTP下載和上傳文件也很容易。讓我們看下載文件:
    • 請注意,出於安全原因,沒有太多允許匿名上傳和下載的公共FTP服務器,因此上面的URL和憑據只是位置持有人。 這與發送HTTP請求幾乎相同,但只有幾個較小的差異:

    curlopt_url - 文件的URL,請注意使用“ ftp://”而不是“ http://”

    <span><span><?php
    </span></span><span><span>$postData = array(
    </span></span><span><span>'login' => 'acogneau',
    </span></span><span><span>'pwd' => 'secretpassword',
    </span></span><span><span>'redirect_to' => 'http://example.com',
    </span></span><span><span>'testcookie' => '1'
    </span></span><span><span>);
    </span></span><span>
    </span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://example.com/wp-login.php',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true,
    </span></span><span><span>CURLOPT_POST => true,
    </span></span><span><span>CURLOPT_POSTFIELDS => $postData,
    </span></span><span><span>CURLOPT_FOLLOWLOCATION => true
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>$output = curl_exec($ch);
    </span></span><span><span>echo $output;</span></span>
    登入後複製
    curlot_userpwd - FTP服務器的登錄憑據
    • 通過FTP上載文件的複雜稍複雜,但仍然可以管理。看起來像這樣:
    • 這裡的重要選擇是:
    • > curlopt_upload - 顯而易見的布爾
    <span><span><?php
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://example.com/wp-login.php',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true,
    </span></span><span><span>CURLOPT_POST => true,
    </span></span><span><span>CURLOPT_POSTFIELDS => $postData,
    </span></span><span><span>CURLOPT_FOLLOWLOCATION => true,
    </span></span><span><span>CURLOPT_COOKIESESSION => true,
    </span></span><span><span>CUROPT_COOKIEJAR => 'cookie.txt'
    </span></span><span><span>));</span></span>
    登入後複製
    > curlopt_infile - 我們想要上傳的文件的可讀流
      > curlopt_infilesize - 我們要在字節中上傳的文件大小

    發送多個請求

    想像一下,我們必須執行五個請求才能檢索所有必要的數據。請記住,某些事情將無法控制,例如網絡延遲和目標服務器的響應速度。那麼,很明顯的是,連續五次通話時的任何延誤確實可以加起來!緩解此問題的一種方法是異步發出請求。 異步技術在JavaScript和Node.js社區中更為常見,但短暫地,我們不再等待耗時的任務完成,而是將任務分配給其他線程或過程,並在此期間繼續做其他事情。任務完成後,我們回來以取得結果。重要的是,我們沒有浪費時間等待結果;我們花了它獨立執行其他代碼。 執行多種異步捲曲請求的方法與以前有所不同。我們從相同的開始 - 我們啟動每個頻道然後設置選項 - 但是我們使用curl_multi_init()啟動多手漢,並使用curl_multi_add_handle()添加我們的頻道。我們通過循環並檢查其狀態來執行處理程序。最後,我們獲得了curl_multi_getContent()的響應內容。
    <span><span><?php
    </span></span><span><span>// init the resource
    </span></span><span><span>$ch = curl_init();
    </span></span><span>
    </span><span><span>// set a single option...
    </span></span><span><span>curl_setopt($ch, OPTION, $value);
    </span></span><span><span>// ... or an array of options
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>OPTION1 => $value1,
    </span></span><span><span>OPTION2 => $value2
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>// execute
    </span></span><span><span>$output = curl_exec($ch);
    </span></span><span>
    </span><span><span>// free
    </span></span><span><span>curl_close($ch);</span></span>
    登入後複製
    登入後複製
    登入後複製
    登入後複製
    上述代碼花費了大約1,100毫秒來在我的筆記本電腦上執行。依次執行請求,而無需大約2,000毫秒的多接口。想像一下,如果您發送數百個請求,您的收益將是多少! 存在多個項目,可以抽象並包裝多接口。討論它們超出了文章的範圍,但是如果您打算異步發出多個請求,那麼我建議您看看它們:
    • github.com/petewarden/parallelcurl
    • > semlabs.co.uk/journal/Object-Eriended-curl-class-curl-class-with-multi-threading

    >故障排除

    如果您使用的是捲曲,那麼您可能正在向第三方服務器執行請求。您無法控制它們,並且可能會出錯:服務器可以離線,目錄結構可以改變等。我們需要一種有效的方法來找出某些事物不起作用時出了什麼問題,幸運的是,Curl為此提供了兩個功能: curl_getinfo()和curl_error() 。 curl_getinfo()返回一個數組,其中包含有關頻道的所有信息,因此,如果要檢查一切是否正確,則可以使用:
    <span><span><?php
    </span></span><span><span>// init the resource
    </span></span><span><span>$ch = curl_init();
    </span></span><span>
    </span><span><span>// set a single option...
    </span></span><span><span>curl_setopt($ch, OPTION, $value);
    </span></span><span><span>// ... or an array of options
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>OPTION1 => $value1,
    </span></span><span><span>OPTION2 => $value2
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>// execute
    </span></span><span><span>$output = curl_exec($ch);
    </span></span><span>
    </span><span><span>// free
    </span></span><span><span>curl_close($ch);</span></span>
    登入後複製
    登入後複製
    登入後複製
    登入後複製
    如果彈出錯誤,您可以使用curl_error()檢查出來:
    <span><span><?php
    </span></span><span><span>curl_setopt_array(
    </span></span><span><span>$ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>$output = curl_exec($ch);
    </span></span><span><span>echo $output;</span></span>
    登入後複製
    登入後複製

    結論

    Curl提供了一種強大而有效的方式來撥打遠程通話,因此,如果您需要爬網或訪問外部API的東西,則curl是工作的絕佳工具。它為我們提供了一個不錯的接口和相對簡單的執行請求的方法。有關更多信息,請訪問PHP手冊和Curl網站。下次見! >對本文的評論已關閉。對PHP有疑問嗎?為什麼不在我們的論壇上詢問? 通過fotolia 圖像 >常見問題(常見問題解答)有關將捲曲用於遠程請求的問題

    curl是什麼,為什麼它在php?

    curl或客戶端URL中使用,是一個允許您在PHP中提出HTTP請求的庫。它用於與不同類型的服務器進行通信並下載或上傳數據。 Curl支持HTTP,HTTP,FTP等各種協議。這是一個強大的工具,可用於與API進行交互,刮擦網頁甚至下載文件。

    >我如何安裝和啟用php?

    curl通常包含在大多數中Web服務器。但是,如果不啟用它,則可以通過修改php.ini文件來做到這一點。找到“; Extension = Curl”的線,然後卸下分號。如果該行不存在,則可以在文件末尾添加。更改後,保存文件並重新啟動您的Web服務器。

    >如何在PHP中簡單捲曲請求? curl_init()函數。然後,使用curl_setopt()函數設置您的選項。最後,使用curl_exec()執行請求,然後用curl_close()關閉會話。這是一個基本示例:

    $ ch = curl_init();

    curl_setopt($ ch,curlopt_url,“ http://example.com”);
    curl_setopt( );
    $ output = curl_exec($ ch);
    curl_close($ ch);

    >
    >如何處理curl中的錯誤?

    >

    >

    >
    >您可以通過使用curl_errno()和curl_error()和curl_error()和curl_error( )功能。這些函數分別返回最後一個錯誤編號和錯誤消息。以下是一個示例:

    if(curl_errno($ ch)){ echo'錯誤:'。 curl_error($ ch);
    }

    >如何使用curl?

    發送發布請求,以發送郵政請求,您需要將curlopt_post選項設置為true,然後將curlopt_postfields選項設置為要發送的一系列數據。以下是一個示例:

    curl_setopt($ ch,curlopt_post,1);
    curl_setopt($ ch,curlopt_postfields,“ postVar1 = value1&postvar2 = value2 = value2”)捲曲請求的標題?

    >您可以使用curlopt_httpheader選項。此選項將標題數組作為其值。以下是一個示例:

    $ headers = array(
    'content-type:application/json',
    '授權:bearer'。$ token
    );
    curl_setopt( $ curl_setopt($ CH,curlopt_httpheader,$ headers);

    >我如何跟隨捲曲重定向?

    >

    要遵循重定向,您需要將curlopt_followlocation選項設置為true。您可以做到這一點:


    curl_setopt($ ch,curlopt_followlocation,true);

    >我如何從curl請求中獲取響應標頭?響應標頭,您可以將curlopt_header選項設置為true。這將包括輸出中的標題。這是一個示例:

    curl_setopt($ ch,curlopt_header,true);

    如何使用curl?

    發送文件,您可以使用文件,您可以使用該文件curlopt_postfields選項,並將文件路徑帶有@符號。以下是一個示例:

    curl_setopt($ ch,curlopt_postfields,array('file'=>'@/path/path/to/file.txt'));


    代理?

    用於將捲曲與代理使用,您可以將curlopt_proxy選項設置為代理的地址。您可以做到這一點:

    curl_setopt($ ch,curlopt_proxy,“ http://proxy.example.com:8080”);

    >

    以上是PHP主|使用捲曲來遠程請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板