如何设置 cURL 以从其他站点检索数据



我在尝试设置 cURL 以从其他站点检索数据时卡住了

这是我的情况。

我有 2 个网站:

  • 一个

网站A以 JSON 格式将数据发送到网站B。当然,网站A必须在发送之前对所有数据进行编码 - 这就完成了。

让 :

  • 用户名 = 测试
  • 密码 = 1234

网站B只需要运行此命令

curl --user test:1234 http://localhost/api/

然后,他们将获取 json 文件,并从中制作任何东西。


但是,如果我必须执行多个 cURL 请求怎么办。所以我想写一个php脚本来做到这一点。这是我到目前为止所拥有的:

<?php
$ch = curl_init("http://localhost/api/");
$fp = fopen("api.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

问题

  • 这样做时,我不确定如何配置usernamepassword
  • 之后,知道在哪里设置usernamepassword,我应该在哪里进行json的解码?
  • 之后,如何以 HTML/PHP 格式显示我刚刚解码的那些数据?
  • 如何测试?

设置用户名和密码

网站 B 正在使用 HTTP 基本身份验证。这是一种通过 HTTP 标头的身份验证方法。您必须在授权标头中设置用户名和密码。这可以通过 PHP 的 cUrl 模块来完成,如下所示:

curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);

解码您的结果

假设您只需要网站 B 返回的 JSON 数据。使用以下选项。它将使curl_exec()返回HTTP正文,而不是直接输出它。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

有关可与 PHP curl 模块一起使用的选项列表,请查看 curl_setopt() 上的文档。现在,您可以使用如下所示curl_exec()使用 cUrl 发出请求:

$body = curl_exec($ch);

然后解码JSON数据,为了简单起见,让我们将其解码为PHP数组:

$data = json_decode($body, true);

测试您的代码

在我看来,PHP不是一种提供出色测试功能的语言。撇开这一点不谈,大多数时候我在交互式shell中测试我的代码。要开始在交互式 shell 中测试您的场景,您应该在系统上安装 PHP CLI。在 Linux 中,这是直截了当的。使用以下命令启动交互式 PHP shell:

php -a

现在,您可以开始整理您的方案。

php > $ch = curl_init('http://echo.jsontest.com/key/value/one/two');
php > curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
php > $body = curl_exec($ch);
php > var_dump($body);
string(39) "{
   "one": "two",
   "key": "value"
}
"
php > $data = json_decode($body, true);
php > print_r($data);
Array
(
    [one] => two
    [key] => value
)
您可以

像这样配置用户名和密码

//cURL Options
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => 'test:1234',  // username:test pass:1234
CURLOPT_HTTPHEADER => array(‘Content-type: application/json’) ,
CURLOPT_POSTFIELDS => $json_string
);
// Setting curl options like this
curl_setopt_array( $ch, $options );
// Getting results
$result = curl_exec($ch); // Getting jSON result string

你如何测试它?我会将所有这些放在一个.php文件中,并在浏览器上调用它进行调试以保持简单。

最新更新