Конвертируйте cURL в Guzzle POST с помощью --form-params и --header - PullRequest
0 голосов
/ 06 февраля 2019

Я борюсь с данным curl-запросом, который я хочу обработать над жадностью.

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]);

Моя проблема сейчас в том, что я понятия не имею, как с этим справиться.В документации жрет я нашел "form_params": http://docs.guzzlephp.org/en/stable/quickstart.html#making-a-request#post-form-requests

Но, похоже, не работает.Если я добавлю массив form_params к моему запросу, получатель не получит их.Кто-нибудь может подсказать, как написать точную команду curl с жадностью?

Спасибо

1 Ответ

0 голосов
/ 07 февраля 2019

Попробуйте использовать 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 и multipart для запросов multipart / form-data.

Дополнительно попробуйте установить клиент Guzzle с включенным debug, так как он будет отображать необработанный HTTPзапрос, который он отправляет, так что вы можете сравнить его с помощью команды curl.

http://docs.guzzlephp.org/en/latest/request-options.html#debug

Трудно понять, какой именно запрос вы хотите отправить, потому что таместь несоответствия между примером curl и вашим кодом.Я пытался воспроизвести завиток как можно лучше.Обратите внимание, что Request 3-й параметр ожидает только заголовки, а для параметров запроса вы должны использовать 2-й параметр 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'
                            ]
                        ]
                ]
            ])
        ]
    ]
]);
...