无法访问第三方API,代码可以在本地服务器上运行,但不能在WordPress上运行

时间:2019-06-24 作者:Vernon van der Merwe

我一直在做一个项目,我就是不能从这个API中提取数据。我正在开发一个插件,可以从API中提取数据,然后使用这些数据。我离线开发了这个项目,工作完成后,我开始在WordPress插件空间中开发。

但出于某种原因,我没有得到任何数据。

以下是我的要求。

add_action( \'wp_loaded\', \'precious_metals\' );
function precious_metals (  ) {  
$content = file_get_contents("A WORKING API"); //Doing this for a client so hiding the API to be safe ;)

$result  = json_decode($content);
}
以下是我的显示器(脱机工作)。表标题确实显示,但没有从API中提取数据。

<H4>New data fetched</H4>
    <table border = solid 1px>
        <tr>
            <td><b>Type</b></td>
            <td><b>$value</b></td>
        </tr>
    <?php foreach($result as $key=>$value): ?>
    <tr>
        <td><?php echo $key; ?></td>
        <td><?php echo $value; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

2 个回复
SO网友:ChristopherJones

你能把这个放进来告诉我们吗$content 看起来像?

<?php
  $c = curl_init();
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($c, CURLOPT_URL, "A WORKING API");
  $content = curl_exec($c);
  curl_close($c);

  echo \'<pre>\';
  print_r($content);
  echo \'</pre>\';
我很好奇这是一个WordPress问题还是一个CORS问题,电话是从另一个主机发出的。

SO网友:Faham Shaikh

您不需要使用file_get_contents 用于远程请求。您应该查看的函数是wp_remote_getwp_remote_post 取决于在接收响应之前要向api发送的数据。在任何情况下,您的代码都应该类似于:

$request  = wp_remote_get( \'http://example.com\' );
$response = wp_remote_retrieve_body( $request );
if (200 !== wp_remote_retrieve_response_code( $response ))
    wp_send_json_error( $response );
wp_send_json_success( $response );
请注意wp_send_json_success/_error 函数是wp_send_json(), 其中包括wp_die() 在最后。所以你不必打电话wp_die() 之后wp_send_json_ 功能。

此外,大多数时候远程API都在发送200 status code 通常,除非api服务器无法解释api调用中的输入变量。因此,在使用之前,您仍然需要手动验证结果。

相关推荐

使用admin-post.php的表单在提交后提供404

我正在为wordpress页面创建一个自定义表单,并使用admin post。php作为我的操作。然而,每当我尝试提交表单时,我都会得到404。以下是输出表单的代码:function output_email_verification() { $error = \'\'; if(isset($_COOKIE[\'rguroo_form_error\'])) { $error = $_COOKIE[\'rguroo_form_error\'