2011-10-20 38 views
5

Tôi đang làm việc với API Google Dịch và có khả năng tôi có thể gửi khá nhiều văn bản cần dịch. Trong scenerio này, Google khuyên bạn nên làm như sau:Làm cách nào để tạo POST bằng cách sử dụng X-HTTP-Method-Override với yêu cầu curl PHP?

Bạn cũng có thể sử dụng POST để gọi API nếu bạn muốn gửi thêm dữ liệu trong một yêu cầu. Tham số q trong nội dung POST phải ít hơn hơn 5K ký tự. Để sử dụng POST, bạn phải sử dụng tiêu đề X-HTTP-Method-Override để yêu cầu API dịch xử lý yêu cầu dưới dạng GET (sử dụng X-HTTP-Method-Override: GET). Google Translate API Documentation

tôi biết làm thế nào để thực hiện một yêu cầu POST bình thường với 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; 

Nhưng làm thế nào để tôi sửa đổi tiêu đề để sử dụng X-HTTP-Phương-Override?

Trả lời

6
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: GET')); 
+0

Hoàn hảo! Đó chính xác là những gì tôi cần. – ashansky

+0

Điều này có phù hợp với bạn không? Tôi vẫn nhận được BAD YÊU CẦU. ; ( – tofutim

0

sử dụng tùy chọn CURLOPT_HTTPHEADER để thêm một tiêu đề từ một mảng chuỗi

1

http://php.net/manual/en/function.curl-setopt.php

CURLOPT_HTTPHEADER

Một loạt các lĩnh vực tiêu đề HTTP để thiết lập, theo định dạng array('Content-type: text/plain', 'Content-length: 100')

Vì vậy,

curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: GET')); 
0

Không đủ đối với tôi, tôi cần phải sử dụng http_build_query fo bài dữ liệu mảng của tôi ví dụ đầy đủ của tôi:

$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']; 
    } 

tôi tìm thấy sự giúp đỡ này đây https://phpfreelancedeveloper.wordpress.com/2012/06/11/translating-text-using-the-google-translate-api-and-php-json-and-curl/ Hy vọng rằng sẽ giúp

Các vấn đề liên quan