Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php从API发出curl请求_Php_Api_Curl - Fatal编程技术网

使用php从API发出curl请求

使用php从API发出curl请求,php,api,curl,Php,Api,Curl,我需要在PHP中使用curl从API获取数据,但我没有这方面的经验 我使用PHP已经有一段时间了(beginer/intermediate level),但我不知道如何使用curl命令或如何制作PHP版本 我对API的了解是,要获得我可以使用的所有书籍的列表: curl --request GET \ --url 'http://example.com/{identifier}' 使用“main”作为{identifier} 这应该给我一个所有书的清单,然后我可以使用它 curl --requ

我需要在PHP中使用curl从API获取数据,但我没有这方面的经验

我使用PHP已经有一段时间了(beginer/intermediate level),但我不知道如何使用curl命令或如何制作PHP版本

我对API的了解是,要获得我可以使用的所有书籍的列表:

curl --request GET \
--url 'http://example.com/{identifier}'
使用“main”作为
{identifier}

这应该给我一个所有书的清单,然后我可以使用它

curl --request GET \
--url 'http://example.com/feed/{identifier}'
获取书籍的(元数据)(标题、作者、描述、年份、封面)

我试过使用
$curl=curl\u init(“http://example.com/feed/main");
然后使用
curl\u setopt\u array($curl,array()
获取数据,但我得到一个“出于安全原因禁用了警告curl\u init()”错误

我完全不知所措,从零开始处理这些API/curl调用

希望有人能给我解释一下

(在Windows上使用Xampp)

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

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

    首先为xamp启用curl。要执行此操作,请执行以下步骤
    1.转到C:\Program Files\xampp\php\php.ini
    2.通过删除分号,取消对php.ini文件中的以下行的注释。
    ;extension=php_curl.dll
    extension=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;
    

    如果您只是执行一个简单的
    GET
    来提取数据,那么如果未禁用
    fopen()
    http/https包装,则可以使用
    file\u GET\u contents()
    。请参阅

    如果需要在标头中设置身份验证令牌,请先定义cookie等。然后需要先设置/创建
    上下文

    不幸的是,
    file\u get\u contents()
    仅适用于
    get
    请求。如果您最终需要执行
    POST
    PUT
    、或
    DELETE
    ,那么您需要让
    curl
    用于PHP安装,或者使用系统的
    curl
    exec()
    或类似。尽管出于安全原因禁用了
    curl
    ,但我怀疑您是否可以使用
    exec()
    和friends.

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

    我不能告诉你为什么在你正在使用的安装中它被禁用了,但是基本的托管软件包通常会限制功能级别和应用程序与本地基础设施交互的能力。我想认真的软件包维护人员也会使用安全的defa分发PHP尽可能多的配置

    我完全不知所措,从零开始处理这些API/curl调用

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

    警告:出于安全原因,已禁用curl_init()

    此消息表示启用了安全模式,或者PHP.ini中的禁用函数列表中包含curl_init

    如果您不知道php.ini文件在哪里,请检查

    <?php phpinfo();
    

    在这里查看禁用curl的可能解决方案……因为PHP只在MSWindows上运行/OP说他们正在使用MSWindows?这是修复禁用函数(与未加载函数相反)的正确方法OP没有说,但如果他使用Xamp,那么对他来说,这是正确的解决方案吗?抱歉。没有指定我使用的是哪个环境,但我在Windows上使用的是xampp…Curl在php.ini中被注释掉是出于某种原因?Curl代码可以工作,并给我一个包含项的字符串。我想我只能使用
    explode()
    要将字符串转换为
    数组()
    或者有更好的方法吗?我得到了这样的字符串[“新书”、“畅销书”、“幻想”、“浪漫”]尝试使用
    curl\u setopt\u数组()
    但是这不起作用,因为curl API调用返回字符串?使用
    str\u replace()
    explode()修复了它
    将其转换为
    数组()
    。好的,你知道了:)这实际上是一个非常简单的解决方案,因为我只需要使用
    GET
    。但是由于我的问题包括
    curl\u init()
    警告和使用curl,我必须选择另一个答案作为解决方案(但你的答案也很有效)。谢谢。
     <?php
       print ini_get('disable_functions') 
       . "<br>" . ini_get('disable_classes')
       . "<br>" . init_get('safe_mode');