php 如何将对象传入http客户端请求?

a6b3iqyw  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(120)

我尝试使用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中缺少了什么
有人能帮帮我吗?

bihw5rsg

bihw5rsg1#

您的原始查询不正确。这应该是一个php数组,当你在请求中使用'json'键时,Symfony正在尝试json_encode()。将$rawQuery重新格式化为

$rawQuery = [
    "CUSTNAME" => "1970188",
    "CURDATE"  => "2020-12-28T00:00:00+02:00",
    "BOOKNUM"  => "Test BookNum",
    "DETAILS"  => "Test Details"
];

字符串

aor9mmx1

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请求失败或响应不符合预期的情况。

相关问题