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

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

William Shakespeare
发布: 2025-02-23 10:14:18
原创
500 人浏览过

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>
登录后复制
登录后复制
登录后复制
登录后复制
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
    作者最新文章
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板