我尝试了几种不同的方法来使用我的 xml 发送 POST 请求,以向我的谷歌自定义搜索添加注释。我尝试过的每种不同方法都会导致 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;
?>
我很感激这方面的任何帮助。
谢谢你。
感谢您的帮助,因为这是我的问题之一。但是,即使在使用 init 并更改标头之后,它仍然给我相同的 HTTP 411 错误。你还有其他建议吗?谢谢一堆。