搜索
首页后端开发php教程PHP主|使用卷曲来远程请求

PHP Master | Using cURL for Remote Requests

PHP主|使用卷曲来远程请求

如果您是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></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></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></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></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></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></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></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></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
    PHP如何识别用户的会话?PHP如何识别用户的会话?May 01, 2025 am 12:23 AM

    phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

    确保PHP会议的一些最佳实践是什么?确保PHP会议的一些最佳实践是什么?May 01, 2025 am 12:22 AM

    PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

    PHP会话文件默认存储在哪里?PHP会话文件默认存储在哪里?May 01, 2025 am 12:15 AM

    phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

    您如何从PHP会话中检索数据?您如何从PHP会话中检索数据?May 01, 2025 am 12:11 AM

    ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

    您如何使用会议来实施购物车?您如何使用会议来实施购物车?May 01, 2025 am 12:10 AM

    利用会话构建高效购物车系统的步骤包括:1)理解会话的定义与作用,会话是服务器端的存储机制,用于跨请求维护用户状态;2)实现基本的会话管理,如添加商品到购物车;3)扩展到高级用法,支持商品数量管理和删除;4)优化性能和安全性,通过持久化会话数据和使用安全的会话标识符。

    您如何在PHP中创建和使用接口?您如何在PHP中创建和使用接口?Apr 30, 2025 pm 03:40 PM

    本文解释了如何创建,实施和使用PHP中的接口,重点关注其对代码组织和可维护性的好处。

    crypt()和password_hash()有什么区别?crypt()和password_hash()有什么区别?Apr 30, 2025 pm 03:39 PM

    本文讨论了PHP中的crypt()和password_hash()之间的差异,以进行密码哈希,重点介绍其实施,安全性和对现代Web应用程序的适用性。

    如何防止PHP中的跨站点脚本(XSS)?如何防止PHP中的跨站点脚本(XSS)?Apr 30, 2025 pm 03:38 PM

    文章讨论了通过输入验证,输出编码以及使用OWASP ESAPI和HTML净化器之类的工具来防止PHP中的跨站点脚本(XSS)。

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    适用于 Eclipse 的 SAP NetWeaver 服务器适配器

    适用于 Eclipse 的 SAP NetWeaver 服务器适配器

    将Eclipse与SAP NetWeaver应用服务器集成。

    SublimeText3 英文版

    SublimeText3 英文版

    推荐:为Win版本,支持代码提示!

    mPDF

    mPDF

    mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    功能强大的PHP集成开发环境