1

Googleカスタム検索に注釈を追加するために、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;
?>

これについて何か助けていただければ幸いです。

ありがとうございました。


これは私の問題の 1 つであったため、ご協力をお願いいたします。ただし、init を使用してヘッダーを変更した後でも、同じ HTTP 411 エラーが発生します。他にアイデアはありますか?本当にありがとう。

4

2 に答える 2

1

ClientLoginの最初のリクエストの後に電話をかけましたが、2番目のリクエストに対してもう一度やり直すのcurl_close($ch);を忘れました。$ch = curl_init();さらに、Content-Lengthヘッダーフィールドを入力する必要はありません。curlは、投稿フィールド/データを設定するときにこれを自動的に入力します。[承認]フィールドの認証値に引用符を追加することもできます。

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

また、コードを投稿するときは、常にGoogleAppsのログインクレデンシャルを削除してください。

于 2011-06-10T05:16:48.577 に答える
0

これは [0] であってはいけませんか? そうではないかもしれませんが、単なる提案です。

 $authToken = $authTokenArray[1];

まだあなたのためにそれを理解することに取り組んでいます....

于 2011-06-10T00:19:39.070 に答える