php - 我需要帮助使用 PHP 将来自 Postman 的成功请求转换为 CURL 命令(涉及 HTTPS 和 POST)

标签 php ssl curl https postman

我尝试访问的端点需要 HTTPS 和基本身份验证。我的团队获得了一个 API key ,文档说明使用该 key 作为用户名,并将密码留空。

这是文档中的示例 CURL 请求:

curl -i -k -u '<api_key>': -XPOST --data-urlencode data@/path/to/test/file.json "https://<your_subdomain>.vendor.org/api/v1/assessments/import"; echo ""

当我使用 Chrome 的 Postman 扩展程序执行以下操作时,我从服务器获得了成功的响应: enter image description here

我正在尝试使用 PHP(XAMPP 安装)在本地执行此操作。以下是从服务器获取用户名/密码不正确的响应:

function curlPost($url, $headers, $username, $password, $data) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CAINFO, 'certificate.pem');
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
	curl_setopt($ch, CURLOPT_HEADER, true);
	curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	print_r(curl_exec($ch));
	// print_r(curl_getinfo($ch));
	// print_r(curl_error($ch));
	curl_close($ch);
}

$data = '{"key":"value", "key":"value"}';
curlPost('https://domain.com/api/data', ['Content-Type: application/xml'], 'api_key', '', $data);

{"success":false,"errors":["Email\/Username or password incorrect. Please try again."],"warnings":[],"info":[],"meta":[],"results":[]}

$data 中使用的 JSON 字符串是从成功的 Postman 请求中复制和粘贴的。

certificate.pem和脚本在同一个文件夹下,并且已经给大家赋予了读/写权限。我已经尝试从我的机​​器导出我们供应商站点的特定证书以及顶部响应中链接的 CA 包 this post .我能够使用它通过 PHP/CURL 成功命中供应商的 api-key-test 端点。

我对这个很陌生。你介意帮我解决我所缺少的问题吗?虽然我已经复制和粘贴了大量内容,但该功能主要是我自己的。 headers 的参数将用于其他事情。

最佳答案

使用 HTTP 授权 header 的基本身份验证使用“用户名:密码”的 Base64 编码值(不带双引号)

因此,我假设在您的情况下,您需要对“yourApiKeyValue:”进行 Base64 编码,并将其放入 cURL 命令的授权 header 中

MDN reference - HTTP Authentication

编辑:这也可能有帮助

How do I make a request using http basic authentication-with-php-curl

关于php - 我需要帮助使用 PHP 将来自 Postman 的成功请求转换为 CURL 命令(涉及 HTTPS 和 POST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080854/

相关文章:

php - 如何在 Laravel 5.2 中将表单数据作为路由参数传递

macos - Mac OS X 服务器代码签名证书更新失败

node.js - 如何将 SSL .crt 文件转换为 key.pem 和 cert.pem 用于 nodejs HTTPS

php - 从不同服务器上的php代码调用php代码

c - 使用curl c选项发布Soap用户名和密码 header

PHP LoginScript MySQL 检查结果错误

php - 当变量为空时使用 IN_ARRAY 获取错误

PHP elseif 语句用于表单验证并插入到数据库

html - 使用托管在其他站点上的 SSL 图像有任何风险吗?

c - gcc 不会在 OS X 的命令行上包含 libcurl