2010-10-09 10 views
2

Je voudrais savoir comment faire une requête HTTP POST telle qu'elle est décrite ici http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#UploadingMetadata (Création d'un document vide). Mon code ressemble à ceci:Effectuer une requête POST

<?php 

$headers = array(
    "POST /feeds/default/private/full HTTP/1.1", 
    "Host: docs.google.com", 
    "GData-Version: 3.0", 
    "Content-Length: 287", 
    "Content-Type: application/atom+xml" 
); 

$data = "<?xml version='1.0' encoding='UTF-8'?>"; 
$data .= "<entry xmlns='http://www.w3.org/2005/Atom'>"; 
$data .= "<category scheme='http://schemas.google.com/g/2005#kind'"; 
$data .= "term='http://schemas.google.com/docs/2007#document'/>"; 
$data .= "<title>new document</title>"; 
$data .= "</entry>"; 

$ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, "http://google.com/docs/feeds/default/private/full"); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HEADER, true); 

$result = curl_exec($ch); 

print_r($result); 

?> 

Qu'est-ce qui ne va pas là-bas? Est-ce que je fais la demande correctement?

Répondre

3
$data = "<?xml version='1.0' encoding='UTF-8'?>"; 

Remplacer par:

$data = "<"."?xml version='1.0' encoding='UTF-8'?".">"; 

Et ...

$data .= "term='http://schemas.google.com/docs/2007#document'/>"; 

Avec:

$data .= " term='http://schemas.google.com/docs/2007#document'/>"; 

Oh, et enfin, vous shoul ne pas être print_r le résultat; print_r est pour les tableaux et les objets, et non pas des chaînes (curl_exec retourne une chaîne ou null/false), utilisez plutôt var_dump($result);

0

En outre, vos en-têtes personnalisés air étrange:

POST n'est pas un en-tête du tout si c'est simplement faux . Hôte: est ajouté par curl lui-même, aucun point dans la définition de cela. Content-Length: se fait par boucle elle-même, vous risquerez la plupart du temps une boucle déroutante si vous vous trompez.

Questions connexes