我尝试使用CURL
发出HTTP请求,如下所示:
$rawQuery = '{
"CUSTNAME" : "1970188",
"CURDATE":"2020-12-28T00:00:00+02:00",
"BOOKNUM":"Test BookNum",
"DETAILS":"Test Details"
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://somelink.co.de");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_POSTFIELDS, $rawQuery);
$curl_response = curl_exec($ch);
字符串
这一个正在返回我的结果。但是当我尝试使用Symfony HTTP客户端实现相同的功能时,我得到了400错误。
这是密码,我试过了。
$response = $this->client->request('POST', $url, [
'auth_basic' => [
'username',
'password'
],
'headers' => [
'Accept' => 'application/json',
],
'json' => $rawQuery
]);
型
我不知道我在Client
中缺少了什么
有人能帮帮我吗?
2条答案
按热度按时间bihw5rsg1#
您的原始查询不正确。这应该是一个php数组,当你在请求中使用'json'键时,Symfony正在尝试json_encode()。将$rawQuery重新格式化为
字符串
aor9mmx12#
$rawQuery变量包含一个JSON格式的字符串,表示要在请求主体中发送的数据。
curl_init()
初始化新的cURL会话。curl_setopt()
用于设置cURL传输的各种选项。以下是正在设置的选项:CURLOPT_URL:
请求将被发送到的URL(本例中为https://somelink.co.de)。CURLOPT_HTTPAUTH:
要使用的HTTP身份验证方法。它被设置为CURLAUTH_BASIC
,表示基本身份验证。CURLOPT_USERPWD:
基本身份验证的用户名和密码,格式为“用户名:密码”。CURLOPT_RETURNTRANSFER:
将此选项设置为1会告诉cURL将传输作为字符串返回,而不是直接输出。CURLOPT_POST:
设置为1指定我们要执行HTTP POST请求。CURLOPT_HTTPHEADER:
要包含在请求中的HTTP头字段数组。在本例中,它指定请求主体为JSON格式。CURLOPT_POSTFIELDS:
作为请求体发送的数据。在本例中,它是来自$rawQuery变量的JSON数据。curl_exec($ch)
执行cURL会话并执行HTTP POST请求。来自服务器的响应存储在$curl_response变量中。在这段代码执行之后,变量$curl_response将包含从服务器接收到的响应,作为一个字符串。根据API或服务器响应,$curl_response的内容会有所不同。相应地处理响应非常重要,例如检查错误或处理服务器发回的数据。
此外,您可能希望在代码中包含错误处理和异常管理,以处理cURL请求失败或响应不符合预期的情况。