Я пробовал несколько разных способов отправки запроса 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 и изменения заголовка. У тебя есть другие идеи? Большое спасибо.