2010-12-07 40 views
0

J'ai besoin d'envoyer des données multi-parties brutes avec un POST php mais sans formulaire html ... im démarrer le processus avec jquery $ .post() à la place (l'objectif est de changer l'arrière-plan d'un compte twitter).

Comment puis-je y parvenir? Ceci est mon courant (et encore incomplète) Code:

1) nom de fichier d'image est inséré dans ce champ caché:

<input type="hidden" id="profile_background_image_url" value="oats.jpg" /> 

2) en cliquant sur le bouton d'envoi, une fonction javascript est déclenchée .. . et il appelle:

$.post('helper.php',{ 
profile_background_image_url:$('#profile_background_image_url').val() 
}); 

3) helper.php a

$param = array(); 
$param['image'] = '/www/uploads/'.$_POST['profile_use_background_image']; 
$status = $connection->post('account/update_profile_background_image',$param); 

Remarques:

  1. tous les fichiers de fond sont à l'intérieur du /www/uploads répertoire local.
  2. im en utilisant Abraham Williams bibliothèque twitteroauth 0,2

ligne de fond, à l'étape trois i besoin d'envoyer $ param [ 'image'] dans données multipart premières à l'objet de connexion de $ (twitter bibliothèque).

Des idées?

Quelques références: http://dev.twitter.com/doc/post/account/update_profile_background_image

+0

Est-ce que 'file_get_contents()' fonctionnerait? – alex

+0

non, ce n'est pas :( – andufo

+0

résolu avec cURL – andufo

Répondre

1

Ouais je vois maintenant que hes la construction du tableau poste de champs dans une chaîne de requête qui signifie que vous devez définir manuellement le type de contenu et que la clé @ dans les image champs ne fera pas sa magie puisque cela ne fonctionne qu'avec un argument de tableau. Plus important encore, je ne vois pas un moyen de modifier les en-têtes sans piratage de la bibliothèque ou de l'étendre et de remplacer certaines fonctions.


Je voudrais essayer serait préfixer @ le chemin du fichier de la image param comme:

$param['image'] = '@/www/uploads/'.$_POST['profile_use_background_image']; 

C'est le moyen pratique de le faire avec cURL, et il semble que le libray utilise essentiellement cURL pour faire la demande, ce qui devrait fonctionner.

+0

essayé aussi ... ne fonctionne toujours pas: s – andufo

0

résolu!

curl_setopt($ci, CURLOPT_POST, TRUE); 
     if(is_array($files)){ 
      $post_file_array = array(); 
      foreach($files as $key=>$value){ 
      $post_file_array[$key] = "@{$value}"; 
      } 
      curl_setopt($ci, CURLOPT_POSTFIELDS, $post_file_array); 
      if (!empty($postfields)) { 
      $url = "{$url}?{$postfields}"; 
      } 
     } 
     else if (!empty($postfields)) { 
      curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
     }