Как сделать POST, используя X-HTTP-Method-Override с запросом PHP curl?
Я работаю с Google Translate API, и есть вероятность, что я могу отправить довольно много текста для перевода. В этом сценарии Google рекомендует сделать следующее:
Вы также можете использовать POST для вызова API, если вы хотите отправить больше данных за один запрос. Параметр q в теле POST должен содержать не более 5К символов. Чтобы использовать POST, вы должны использовать заголовок X-HTTP-Method-Override, чтобы указать Translate API для обработки запроса как GET (используйте X-HTTP-Method-Override: GET). Документация по Google Translate API
Я знаю, как сделать обычный запрос POST с CURL:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Но как мне изменить заголовок, чтобы использовать X-HTTP-Method-Override?
4 ответа
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: GET') );
http://php.net/manual/en/function.curl-setopt.php
CURLOPT_HTTPHEADER
Массив полей заголовка HTTP для установки в формате
array('Content-type: text/plain', 'Content-length: 100')
Таким образом,
curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: GET'));
Использовать CURLOPT_HTTPHEADER
возможность добавить заголовок из массива строк
Не достаточно для меня, мне нужно использовать http_build_query для моих данных публикации массива мой полный пример:
$param = array(
'key' => 'YOUR_API_KEY_HERE',
'target' => 'en',
'source' => 'fr',
"q" => 'text to translate'
);
$formData = http_build_query($param);
$headers = array( "X-HTTP-Method-Override: GET");
$ch=curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$formData);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers );
curl_setopt($ch, CURLOPT_REFERER, 'http://yoursite'); //if you have refere domain restriction for your google API KEY
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,'https://www.googleapis.com/language/translate/v2');
$query = curl_exec($ch);
$info = curl_getInfo($ch);
$error = curl_error($ch);
$data = json_decode($query,true);
if (!is_array($data) || !array_key_exists('data', $data)) {
throw new Exception('Unable to find data key');
}
if (!array_key_exists('translations', $data['data'])) {
throw new Exception('Unable to find translations key');
}
if (!is_array($data['data']['translations'])) {
throw new Exception('Expected array for translations');
}
foreach ($data['data']['translations'] as $translation) {
echo $translation['translatedText'];
}
Я нашел эту помощь здесь https://phpfreelancedeveloper.wordpress.com/2012/06/11/translating-text-using-the-google-translate-api-and-php-json-and-curl/ Надеюсь, что помогает