HTTP发送请求以发送数据并获取响应(API)

时间:2018-11-23 05:54:10

标签: php api http curl request

我必须进行API调用。在文档中有一个示例URL,我必须使用它来传递包括授权在内的参数,它看起来像这样:

https://.com/create/shipment_?username=your_username_here?password=your_password_here?address=street1?package=t-shirtbox

但是由于API使用了post方法,所以我无法通过http来实现。我必须提出实际的职位要求。

我尝试过卷曲:

$url = https://.com/create/shipment_?username=your_username_here?password=your_password_here?address=street1?package=t-shirtbox
$username = 'username';
$password = 'password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
$httpCode = curl_getinfo($ch , CURLINFO_HTTP_CODE); 
$response = curl_exec($ch);
if ($response === false) $response = curl_error($ch);
curl_close($ch);

我得到回复:

未经授权。该服务器无法验证您 被授权访问文档 要求。您提供的是错误的 凭据(例如密码错误)或您的 浏览器不了解如何提供 所需的凭据。

我尝试过php,结果是一样的。

$options = array(
'http' => array(
    'method'  => 'POST',
    'header'=>  "Content-Type: application/json\r\n" .
        "Accept: application/json\r\n".
        "Authorization: Basic ". base64_encode("username:password") ."\r\n".
        "GEOClient: account/123456\r\n".
        "Content-Length: 0"
)
);

$context     = stream_context_create($options);
$result      = file_get_contents($url, false, $context);

响应未经授权。

支持小组说,他们为该帐户提供的用户名和密码是有效的。

我还使用了邮递员和SOAP UI之类的工具来测试URL,但响应也是未经授权的。

执行此类请求的方法是什么,传递用户名,密码和所有其他数据(如地址等)的正确方法是什么。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您不能像邮递员一样调用API,则需要确定另一方是否需要对帐户和密码进行加密以及另一方是否设置了IP限制。

答案 1 :(得分:0)

我找到了解决方案。客户似乎给我发送了错误的链接。 我花了好几个小时来解决这个问题。