我正在努力解决给定的卷曲请求,我想解决这个问题。
curl请求看起来像这样:
curl --location --request POST "https://apis.myrest.com" \
--header "Content-Type: multipart/form-data" \
--header "Authorization: Bearer YOUR-BEARER-TOKEN" \
--form "mediaUrl=https://myfile.mpg" \
--form "configuration={
\"speechModel\": { \"language\": \"en-US\" },
\"publish\": {
\"callbacks\": [{
\"url\" : \"https://example.org/callback\"
}]
}
}
我希望它通过这样的枪口发送:
// 1. build guzzle client:
//----------------------------------------------------------------------
$this->client = new Client([
'base_uri' => $this->config->getBaseUri(),
]);
// 2. build guzzle request:
//----------------------------------------------------------------------
$request = new Request(
'POST',
'myendpoint',
[
'authorization' => 'Bearer ' . $this->config->getApiToken(),
'cache-control' => 'no-cache',
'content-type' => 'application/json',
// maybe here, or not?
form_params => ['mediaUrl' => 'www.media.com'],
]
);
// 3. send via client
//----------------------------------------------------------------------
response = $this->client->send($request, ['timeout' => self::TIMEOUT]);
我现在的问题是,我不知道如何处理此问题。在guzzle的文档中,我找到了“ form_params”: http://docs.guzzlephp.org/en/stable/quickstart.html#making-a-request#post-form-requests
但是它似乎不起作用。如果我将form_params-array添加到我的请求中,则接收方无法获取它们。有人可以告诉我,如何用枪口写出精确的curl命令吗?
谢谢
答案 0 :(得分:1)
尝试使用multipart
代替form_params
。
http://docs.guzzlephp.org/en/latest/request-options.html#form-params
来自Guzzle文档:
form_params不能与multipart选项一起使用。您将需要 使用一个或另一个。使用form_params application / x-www-form-urlencoded请求,以及用于 多部分/表单数据请求。
另外尝试在启用debug
的情况下设置Guzzle Client,因为它将显示发送的原始HTTP请求,因此您可以使用curl命令更轻松地进行比较。
http://docs.guzzlephp.org/en/latest/request-options.html#debug
很难理解您要发送的确切请求是什么,因为curl示例和您的代码之间存在矛盾。我试图尽可能地复制卷发。请注意,Request
第三个参数仅包含标头,对于请求选项,您必须使用send
的第二个参数。
$client = new Client([
'base_uri' => 'https://example.org',
'http_errors' => false
]);
$request = new Request(
'POST',
'/test',
[
'Authorization' => 'Bearer 19237192837129387',
'Content-Type' => 'multipart/form-data',
]
);
$response = $client->send($request, [
'timeout' => 10,
'debug' => true,
'multipart' => [
[
'name' => 'mediaUrl',
'contents' => 'https://myfile.mpg'
],
[
'name' => 'configuration',
'contents' => json_encode([
'speechModel' => [
'language' => 'en-US'
],
'publish' => [
'callbacks' =>
[
[
'url' => 'https://example.org/callback'
]
]
]
])
]
]
]);