【问题标题】:CURL,JSON and PHPCURL、JSON 和 PHP
【发布时间】:2013-11-27 19:15:48
【问题描述】:

我正在使用 curl 和 PHP 连接 API

我有这个 CURL 语句

curl -i --user api:YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1 --data-binary @test.png https://api.blahblah.com/blah

其中 YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1 是 api 密钥,@test.png 是我需要传输到 API 进行上传的图像文件。我不明白的是如何为上面的链接编写卷曲

我也有这个网站为开发人员提供的示例语句(看起来是 JSON)

POST /blah HTTP/1.1
Host: api.blahblah.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1

到现在为止,我已经写好了,

$url = 'https://api.tinypng.com/shrink';
$image = 'bf4lwp2.png';
$key = 'YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1';

$jsonscript = array( 
'Host' => 'api.tinypng.com',
'Authorization' => $key );

$json_string = json_encode($jsonscript);

$ch = curl_init($url);
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'api:'.$key);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $image);
// Execute
$result=curl_exec($ch);

另外,如果我的请求成功,我会得到这个......

HTTP/1.1 201 Created
Location: https://api.blahblah.com/blahblah.png
Content-Type: application/json; charset=utf-8

{
  "input": {
    "size": 87654
  },
  "output": {
    "size": 102020,
    "ratio": 0.236
  }
}

我知道我必须使用 file_get_contents() 来获取所有这些信息,但我不知道在该函数中放置什么 URL。

【问题讨论】:

  • file_get_contents 不能自己进行 POST。它只会做GET。您必须使用 cURL,或使用流传递给 f_g_c
  • 显然......我在最后写了它......“我不知道在那个函数(file_get_contents())中放置什么URL(或传递什么)”......对不起,如果我听起来很粗鲁……这是我的项目,我有点头疼(不是真的,但你知道我的意思)花这么多时间在上面……你能帮我处理 curl 声明吗?我哪里错了??
  • CURLOPT_FILE 正在将接收到的数据写入文件。这不是你上传文件的方式。这是通过 postfields 和文件名上的 @ 前缀完成的。例如array('@file' => 'test.png')
  • @Marc B 所以,你是说我应该使用curl_setopt($ch, CURLOPT_POSTFIELDS, $file) where $file = array('@file' => 'test.png');
  • 差不多......加上 api,它可能会进入 CURLOPT_USERPW

标签: php json curl http-post transfer


【解决方案1】:

要首先从 json 获取数据,您可以使用 json decode 然后使用 foreach 循环 将这些数据解析为变量

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多