【问题标题】:How to do I format this curl command in PHP如何在 PHP 中格式化这个 curl 命令
【发布时间】:2013-03-13 21:00:29
【问题描述】:

我正在尝试构建对我的第一个 API 和文档中显示的示例请求的 PHP 调用,告诉我使用 curl 发出此请求,但我没有取得多大成功。我尝试关注其他答案(即 CURL php query formation - how to? )并且知道我做错了什么但似乎无法弄清楚?

任何帮助将不胜感激。

初始请求必须经过 HTTP Basic 授权。

 POST /api/shrink HTTP/1.1
 Host: api.site.org
 Authorization: Basic YXsdflasdkfjalsdjfojiosslkjdZdXZ3eHl6MDEyMzQ1  

curl -i --user api:api_key --data-binary @test.png http://api.site.org

这应该返回一个包含图像文件 url 的 json 字符串。

【问题讨论】:

  • 而它返回的是什么?
  • 它返回一个 json 字符串,其中包含一个图像文件的 url。

标签: php api


【解决方案1】:

应该是这样的:

$url = "http://api.site.org/api/shrink";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST ,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); /* obey redirects */
curl_setopt($ch, CURLOPT_HEADER, 0);  /* No HTTP headers */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  /* return the data */
curl_setopt($process, CURLOPT_USERPWD, 'api:api_key');

$data = array(
    'uploaded_file' => '@/path/to/test.png'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$result = curl_exec($ch);

curl_close($ch);

【讨论】:

  • 谢谢,我相信它可以正常工作,但是当我尝试访问 Json 时它应该返回我得到错误或什么都没有?这是它应该返回的 json HTTP/1.1 200 OK Content-Type: application/json { "input": { "size": 207565 }, "output": { "depth": 8, "size": 63669, "ratio": 0.307, "url": "http://api.site.org/api/shrink/out/toab3elfoadgjut7.png" } }
  • curl_exec这一行之后,你可以试试print(curl_error($ch);看看是什么错误。
  • 感谢您的帮助,但我正在连接到 API,但它没有重新配置 png 文件?我收到一条错误消息,我尝试了几种在网上找到的不同解决方案,但没有运气。在文档中声明“发布数据应包含 PNG 二进制文件”?不确定这是否只是意味着一个有效的 png 文件,还是有一个输出二进制文件的进程?
  • 还有另一种方法:stackoverflow.com/questions/4223977/…我没有尝试过这种方法,但是使用这种方法似乎可以将文件指针设置为 curl 选项 CURLOPT_INFILE 之一。它还展示了如何设置文件大小和其他一些可能相关的选项。
  • 谢谢,我试过了,还是没有成功,太郁闷了。
【解决方案2】:

我认为它会是这样的:

$c = curl_init('http://api.site.org');
curl_setopt_array($c, array(
    CURLOPT_USERPWD => 'api:api_key' // --user
    CURLOPT_POST    => 1,
    CURLOPT_POSTFIELDS => '@/full/path/to/test.png;type=image/png', // --data-binary, added mime type for good measure
    CURLOPT_HEADER => 1, // this is to the -i
    CURLOPT_RETURNTRANSFER => 1, // so you get the response back from curl_exec()
));
$response = curl_exec($c);

您有-i 标志,但我不确定您是否想要响应标头,以防您也添加CURLOPT_HEADER => 1。此外,如果您不想在 php 进程的输出中输出响应,请使用 CURLOPT_RETURNTRANSFER => 1,您将从 curl init 中获得响应。

【讨论】:

    【解决方案3】:

    在我看来,您需要的所有信息都可以是found here

    cURL 函数curl_setopt 允许您设置最适合您的 curl 选项。

    希望这会有所帮助。 =)

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2017-07-10
      • 2015-02-16
      • 2012-09-25
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多