我在尝试设置cURL以从其他网站检索数据时遇到困难
这是我的情况。
我有2个网站:
网站A
以json格式将数据发送到网站B
。
当然,网站A
必须在发送之前对所有数据进行编码 - 这已经完成了。
让:
网站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? 答案 0 :(得分:0)
您可以像这样配置用户名和密码
//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文件中并在浏览器上调用它来调试以保持简单。
答案 1 :(得分:0)
网站B正在使用HTTP Basic Authentication。这是通过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()
上检查the documentation。现在,您已准备好使用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
)