【发布时间】:2020-10-06 22:19:13
【问题描述】:
我正在使用以下 guzzle 代码使用 Odoo API 创建客户
$headers = ['headers' => ['Accept' => 'application/json','Content-Type' => 'application/json','Access-Token' => $access_token]];
$client = new \GuzzleHttp\Client($headers);
$response = $client->request('POST', $url.'?magento_id='.$magento_id.'&odoo_email='.$magento_email.'&data_json='.json_encode($magentoCustomer));
echo $response->getStatusCode();exit;
但我在错误日志中收到以下错误
error: `POST https://domain/api/res.partner/magento_update_partner_single?magento_id=28&odoo_email=mail@mail.com&data_json=%7B%22customer%22:%7B%22id%22:28,%22group_id%22:1,%22created_in%22:%22Default%20Store%20View%22,%22dob%22:%22string%22,%22email%22:%22mail@mail.com%22,%22firstname%22:%22Bilal%22,%22lastname%22:%22Usean%22,%22middlename%22:%22%22,%22store_id%22:1,%22website_id%22:1,%22addresses%22:%5B%7B%22id%22:113,%22customer_id%22:28,%22country_id%22:%22US%22,%22street%22:%5B%227000%20Central%20Parkway,%20Suite%20220%22%5D,%22telephone%22:%22+1%20678-648-7722%22,%22postcode%22:%2230328%22,%22city%22:%22Atlanta%22,%22region%22:%7B%22region_code%22:%22GA%22%7D,%22firstname%22:%22Bilal%20Usean%22,%22lastname%22:%22Bilal%20Usean%22,%22middlename%22:%22%22%7D%5D,%22disable_auto_group_change%22:0%7D,%22password%22:%22qwer@123%22%7D` resulted in a `400 BAD REQUEST` response:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>Invalid J (truncated...)
我已经从错误中复制了 URL 并使用以下命令运行,我得到 HTTP 状态代码 200 成功响应。
curl -X POST 'https://domain/api/res.partner/magento_update_partner_single?magento_id=28&odoo_email=mail@mail.com&data_json=%7B%22customer%22:%7B%22id%22:28,%22group_id%22:1,%22created_in%22:%22Default%20Store%20View%22,%22dob%22:%22string%22,%22email%22:%22mail@mail.com%22,%22firstname%22:%22Bilal%22,%22lastname%22:%22Usean%22,%22middlename%22:%22%22,%22store_id%22:1,%22website_id%22:1,%22addresses%22:%5B%7B%22id%22:113,%22customer_id%22:28,%22country_id%22:%22US%22,%22street%22:%5B%227000%20Central%20Parkway,%20Suite%20220%22%5D,%22telephone%22:%22+1%20678-648-7722%22,%22postcode%22:%2230328%22,%22city%22:%22Atlanta%22,%22region%22:%7B%22region_code%22:%22GA%22%7D,%22firstname%22:%22Bilal%20Usean%22,%22lastname%22:%22Bilal%20Usean%22,%22middlename%22:%22%22%7D%5D,%22disable_auto_group_change%22:0%7D,%22password%22:%22qwer@123%22%7D' -g -H "accept: application/json" -H "Access-Token: df729ade753cbe46789befae12344d72e9a7964d"
curl 命令工作正常,因此 URL 查询参数正确传递,但不知何故在 guzzle 中失败。
请建议我解决这个问题。
【问题讨论】:
-
cURL 命令似乎具有正确的 URL 编码的特殊字符,尤其是在 JSON 部分中。有了你的贪婪要求,你似乎没有在这方面做出任何努力。
-
STOP 手动组装查询字符串;
http_build_query存在。 -
在第一个示例中对您的 json 进行 URL 编码
-
@CBroe 在错误日志中,它显示带有 400 错误响应的编码格式 URL,所以我认为不需要进一步编码。顺便说一句,刚才我尝试了 http_build_query 和 urlencode 但没有运气,抛出了同样的错误请求错误。
-
我已经和邮递员核对过,“带编码”和“不带编码”都出现同样的错误,curl 命令只能工作
标签: php curl httpclient guzzle