Отправка необработанных составных данных через jquery $.post() и php

мне нужно отправить необработанные составные данные с помощью php POST, но без html-формы... вместо этого я запускаю процесс с помощью jquery $.post() (цель состоит в том, чтобы изменить фон учетной записи Twitter).

Как я могу этого добиться? Это мой текущий (и все еще неполный) код:

1) Имя файла изображения вставляется в это скрытое поле ввода:

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

2) при нажатии на кнопку отправки запускается функция javascript... и она вызывает:

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

3) helper.php имеет

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

Примечания:

  1. все фоновые файлы находятся в локальном каталоге /www/uploads.
  2. я использую библиотеку twitteroauth Авраама Уильямса 0.2

В итоге на третьем шаге мне нужно отправить $param['image'] в необработанных составных данных в объект $connection (библиотека Twitter ).

Есть идеи?

Некоторые ссылки: http://dev.twitter.com/doc/post/account/update_profile_background_image< /а>


person Andres SK    schedule 07.12.2010    source источник
comment
Будет ли работать file_get_contents()?   -  person alex    schedule 07.12.2010


Ответы (2)


Да, теперь я вижу, что он создает массив полей сообщений в строке запроса, что означает, что вам нужно вручную установить тип контента, и что ключ @ в полях image не будет делать свое волшебство, поскольку он работает только с аргументом массива. Что еще более важно, я не вижу способа изменить заголовки без взлома библиотеки или ее расширения и замены определенных функций.


Я бы попробовал добавить @ к пути к файлу параметра image, например:

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

Это удобный способ сделать это с помощью cURL, и похоже, что библиотека в основном использует cURL для выполнения запроса, так что это должно работать.

person prodigitalson    schedule 07.12.2010

решено!

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);
        }
person Andres SK    schedule 07.12.2010