我在尝试设置 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);
?>
问题
- 这样做时,我不确定如何配置
username
和password
。 - 之后,知道在哪里设置
username
和password
,我应该在哪里进行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文件中,并在浏览器上调用它进行调试以保持简单。