【问题标题】:How can I post a form field through CURL in PHP?如何在 PHP 中通过 CURL 发布表单字段?
【发布时间】:2018-07-18 23:25:56
【问题描述】:

我正在尝试在我的网站上集成一个 API,它要求我发布一个以 base64 编码的授权字段。但是,这是说我做得不对。我想知道是不是因为我没有正确发布该字段。这是我到目前为止所做的。

$pro = '00000000000';

$host = 'http://www.saiasecure.com/irsec/getimginfo1.aspx?refNumber='.$pro; 

$authorization = 'username : password';

$authorization = base64_encode($authorization);

$post = array(

    'Authorization' => $authorization

    );

$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$return = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXMLElement($return);

try
{

    print_r($xml);

} catch(SoapFault $ex){

    $ex->getMessage();
    echo $ex;

}

这些是开发者提供的 API 说明。

这是我从 API 得到的响应:

有人知道我做错了什么吗?快把我逼疯了!

【问题讨论】:

  • 身份验证有问题,请交叉检查您的用户名和密码。
  • 您可能不应该在用户名和密码之间留有空格。
  • 试试:$authorization = 'username:password';

标签: php xml curl base64


【解决方案1】:

文档说该值是用户 ID、':' 和密码的串联。这可能是令人困惑的措辞。您应该删除这些空格,使您的代码:

$authorization = 'username:password';

C# 代码示例表明它需要 base64 编码:

$authorization = base64_encode($authorization);

根据 Xorifelse 的输入,让 curl 为您设置标题更简单:

curl_setopt($ch, CURLOPT_USERPWD, $authorization);

【讨论】:

  • 我会在密码上使用编码(可能还有用户名),当然在另一端解码。
  • 我不明白你的意思。我的回答只是解决您的代码示例中看起来像问题的部分。我假设他们希望您对整个内容进行 base64 编码(不对密码本身做任何特殊处理)。
  • 那行不通。它一直给我同样的错误信息:(
  • 你可以,我倾向于使用curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");This 可能会让您更深入地了解如何手动设置标题。
  • 尝试使用saiasecure.com/irsec/b_cs_http.asp 上的示例tio.run 插入您的凭据和其他任何必要的东西。看看它是否有效。
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 2017-11-21
  • 2018-03-29
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
相关资源
最近更新 更多