API пользовательского поиска Google PHP curl Post XML HTTP 411 error - PullRequest
1 голос
/ 10 июня 2011

Я пробовал несколько разных способов отправки запроса POST с моим xml, чтобы добавить аннотацию в мой пользовательский поиск Google. Каждый другой метод, который я пробовал, приводил к ошибке HTTP 411 (для запросов POST требуется заголовок Content-length). Вот мой текущий код:

    <?php
    $ch = curl_init();
    $url = 'https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&Email=****&Passwd=*****&service=cprose&source=ednovo-classadmin-1';
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $authTokenData = curl_exec($ch);
    $authTokenArray = explode('Auth=', $authTokenData);
    $authToken = $authTokenArray[1];

    echo "got token: $authToken<br>";

    $annotation = $_POST['annotation'];
    $label = $_POST['label'];
    $href = $_POST['href'];
    curl_close($ch);
    $data ='<Batch>' .
                '<Add>' .
                    '<Annotations>' .
                        '<Annotation about = "' . $annotation . '">' .
                            '<Label name = "' . $label . '" />' .
                        '</Annotation>' .
                    '</Annotations>' .
                '</Add>' .
            '</Batch>';
   $url = "http://www.google.com/cse/api/default/annotations/";
    curl_setopt($ch, CURLOPT_URL, $url);
    $length = strlen($data);
    $header = array("Authorization: GoogleLogin auth=" . $authToken, "Content-Type: text/xml","Content-Length: " . $length);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);

    if ( curl_errno($ch) ) {
    $result = 'cURL ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
} else {
    $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
    switch($returnCode){
        case 200:
            break;
        default:
            $result = 'HTTP ERROR -> ' . $returnCode;
            break;
    }
}

    echo $result;
?>

Я ценю любую помощь с этим.

Спасибо.


Я ценю вашу помощь, так как это было одной из моих проблем. Тем не менее, он все еще дает мне ту же ошибку HTTP 411 даже после использования init и изменения заголовка. У тебя есть другие идеи? Большое спасибо.

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Вы позвонили curl_close($ch); после первого запроса на ClientLogin, но забыли снова сделать $ch = curl_init(); для второго запроса.Добавьте, вам не нужно помещать поле заголовка Content-Length;curl заполняет это автоматически при настройке полей / данных поста.Вы также можете попробовать добавить кавычки в значение авторизации в поле Авторизация.

$header = array('Authorization: GoogleLogin auth="'. $authToken.'"', "Content-Type: text/xml");

И всегда удалять свои учетные данные для входа в Службы Google при публикации кода.

0 голосов
/ 10 июня 2011

Разве это не должно быть [0]?Может быть, нет, просто предложение.

 $authToken = $authTokenArray[1];

Все еще работаю над тем, чтобы выяснить это для вас ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...