来自API的curl请求与php

时间:2018-05-04 10:25:56

标签: php api curl

我需要在PHP中使用curl从API获取数据,但我对此没有经验?

我已经使用PHP一段时间了(初级/中级),但我不知道如何使用curl命令或如何制作PHP版本。

我所知道的API就是获取我可以使用的所有书籍的清单:

curl --request GET \
--url 'http://example.com/{identifier}'

使用" main"作为{identifier}

这应该给我一本书的清单,然后我可以使用

curl --request GET \
--url 'http://example.com/feed/{identifier}'

获取书籍的(元)数据(标题,作者,描述,年份,封面)

我已尝试使用$curl = curl_init("http://example.com/feed/main");,然后使用curl_setopt_array($curl, array()获取数据,但我得到"警告curl_init()因安全原因而被停用&# 34; 错误。

我完全迷失了,从头开始这些API / curl调用...

希望有人可以向我解释一下吗?

(在Windows上使用Xampp)

4 个答案:

答案 0 :(得分:0)

  1. 找到 PHP.ini 文件(例如,通常位于 Apache 安装的/ bin文件夹中。
  2. 在文本编辑器中打开 PHP.ini
  3. 搜索或查找以下内容:;extension=php_curl.dll
  4. 通过删除前面的分号;取消注释
  5. 保存并关闭 PHP.ini
  6. 重新启动您的Web服务器(例如 Apache Nginx
  7. 您可以使用以下示例代码测试是否启用了cURL:

    <?php
    // Test if cURL is enabled
    echo 'Curl: ', function_exists('curl_version') ? 'Enabled' . "\xA" : 'Disabled' . "\xA";
    ?>
    

答案 1 :(得分:0)

首先为你的xamp启用curl。为此,请按照步骤
进行操作  1.转到 C:\ Program Files \ xampp \ php \ php.ini
 2.通过删除分号取消注释php.ini文件中的以下行 ;extension=php_curl.dllextension=php_curl.dll
3.重新启动Apache服务器。

然后用户thr curl like

$url= "http://example.com/feed/main";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_ENCODING, ""); // this will handle gzip content
$result = curl_exec($ch);
curl_close($ch);
print $result;

答案 2 :(得分:0)

如果您只是使用简单的GET来提取数据,那么您可以使用file_get_contents()如果fopen() http / https包装器未被禁用。见http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

如果您需要在标头中设置身份验证令牌,请先定义Cookie等,然后您需要首先设置/创建context - http://php.net/manual/en/function.stream-context-create.php

不幸的是,file_get_contents()仅适用于GET次请求。如果您最终需要执行POSTPUTDELETE,那么您需要让curl为您的PHP安装工作,或者使用系统{ {1}}和curl或类似内容。虽然出于安全原因禁用了exec(),但我怀疑您可以使用curl和朋友。

答案 3 :(得分:0)

(StackOverflow上有很多类似的问题,但是对于我所看到的所有问题,答案的质量都不是很好 - 因此不会将其标记为重复)

我无法告诉您为什么它在您正在使用的安装上被禁用,但基本托管包的常见做法是限制功能级别和应用程序与本地基础结构交互的能力。我想认为,尽责的软件包维护者也会尽可能安全地发布PHP默认配置。

  

我完全迷失了,从头开始这些API / curl调用...

这里有2个问题 - 您对这应该如何工作的理解以及阻止您的代码运行的错误消息。如果我们担心后者,那么至少你可以自己解决前者问题。

  

警告curl_init()因安全原因被禁用

此消息表示已启用safe_mode或curl_init包含在PHP.ini的已禁用函数列表中。

如果您不知道php.ini文件的位置 - 请检查

的输出
<?php phpinfo();

请注意,某些ini设置可以在其他地方覆盖 - 例如在Apache的httpd.config或.htaccess文件中 - 但不是这些文件。

如果您无法访问ini文件,或者您可以使用以下设置进行设置:

 <?php
   print ini_get('disable_functions') 
   . "<br>" . ini_get('disable_classes')
   . "<br>" . init_get('safe_mode');

在curl_init的情况下,我们真的只对第一个感兴趣。但是如上所述 - 如果我们谈论主机你没有完全控制权,那么它可能是你托管包的约束。

IIRC,disable_functions中的一个条目将屏蔽掉一个丢失的扩展名 - 所以你可以从php.ini中删除该条目并开始看到未定义的函数错误。在这种情况下,您需要按照其他人的描述安装扩展(但相关的文件名是Unix / Linux系统上的php_curl.so),记得在适当的时候重新启动httpd / php-fpm。

您现在可以调用该功能。这并不意味着您的主人能够:

  • 解析网址中的主机名
  • 建立http / https连接

但你会看到不同的错误。