Опять 25 - curl multipart/form-data - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB90.7493
BTC/USD69769.1299
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 13.03.2012, 04:46   #1
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 13,855
Бабло: $1885685
Отправить сообщение для digg с помощью ICQ
Angry Опять 25 - curl multipart/form-data

по сути продолжение темы http://www.gofuckbiz.com/showthread.php?t=6594

вся пачка данных передается, а картинка не передается на сервак

это http запросы, когда руками
PHP код:
Content-Dispositionform-dataname="image[1]"
file
Content
-Dispositionform-dataname="image[1]"filename="n_7327.jpg"
Content-Typeimage/jpeg
yOya
?Exif 
пишу такой массив
PHP код:
$postdata = array(
...
...
        
'image[1]'=>'file',
        
'image[1]'=>'@'.realpath('images/'.trim($item[0])),
...
...
    );



curl_setopt($crCURLOPT_POST1);
     
curl_setopt$crCURLOPT_UPLOAD);
     
curl_setopt($crCURLOPT_POSTFIELDS$postdata);
curl_setopt($crCURLOPT_HTTPHEADER, array("User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8""Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3""Accept-Encoding: gzip, deflate",
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7""Connection: keep-alive"));
     
curl_setopt($crCURLOPT_FOLLOWLOCATION1);
     
curl_setopt($crCURLOPT_RETURNTRANSFER1);
реферурл
     curl_setopt
($crCURLOPT_ENCODING'gzip,deflate');
     
curl_setopt($crCURLOPT_COOKIEFILE"cookie.txt");
     
curl_setopt($crCURLOPT_COOKIEJAR"cookie.txt");
     
$r curl_exec($cr);
     
curl_close ($cr); 
и не передает

интересно, что руками name="image[1]" передается 2 раза подряд
в самой форме там два поля с одинаковыми именами, одно хайден
в массиве так сделать нельзя
да и в самом PHP тоже никак не получишь $_POST["image[1]"] 2 разные переменные
мож там не пхп, думал из-за этого

у кого есть какие мысли?

Последний раз редактировалось digg; 13.03.2012 в 04:52.
digg на форуме  
Старый 13.03.2012, 05:30   #2
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

а если:
CURLOPT_POSTFIELDS => http_build_query($postdata)
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 13.03.2012, 05:57   #3
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 13,855
Бабло: $1885685
ТС -->
Отправить сообщение для digg с помощью ICQ
автор темы ТС По умолчанию

сам пост то проходит и строка введенной капчи и все остальные поля
все кроме картинки
digg на форуме  
Старый 13.03.2012, 06:02   #4
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 928
Бабло: $196595
По умолчанию

> у кого есть какие мысли?

Попробуй передавать в CURLOPT_HTTPPOST список пар.

http://curl.haxx.se/libcurl/c/curl_e...URLOPTHTTPPOST

Не знаю, как в PHP, в python именно так оно работает.
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума  
Старый 13.03.2012, 06:18   #5
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 13,855
Бабло: $1885685
ТС -->
Отправить сообщение для digg с помощью ICQ
автор темы ТС По умолчанию

и так пробовал
PHP код:
curl_setopt($crCURLOPT_POSTFIELDS$postdata);
curl_setopt($crCURLOPT_HTTPPOSTFILEFIELDS,  array("image[1]" => 'images/'.trim($item[0]))); 
тоже не срабатывает
digg на форуме  
Старый 13.03.2012, 06:58   #6
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 13,855
Бабло: $1885685
ТС -->
Отправить сообщение для digg с помощью ICQ
автор темы ТС По умолчанию

похоже нашел в чем глюк
сделал простенький приемник этого пакета

PHP код:
print_r($_POST);
print_r($_FILES); 
и на него весь массив посылаю

и прикол в том, что получает вот такой массив

PHP код:
Array
(
    [
image] => Array
        (
            [
name] => Array
                (
                    [
1] => 1052.jpg
                
)

            [
type] => Array
                (
                    [
1] => image/jpeg
                
)

            [
tmp_name] => Array
                (
                    [
1] => C:\Program Files\xampp\tmp\php5E.tmp
                
)

            [
error] => Array
                (
                    [
1] => 0
                
)

            [
size] => Array
                (
                    [
1] => 26668
                
)

        )


вместо [image[1]] передает просто [image]

а в [data] => Array из $_POST его вообще нет

вопрос - как передать в названии переменной файла квадратную скобку?
[
digg на форуме  
Старый 13.03.2012, 07:03   #7
incognito
Senior Member
 
Аватар для incognito
 
Регистрация: 08.07.2007
Сообщений: 177
Бабло: $34565
По умолчанию

может массивом?
PHP код:
$image['image[1]'][] = 'file';
$image['image[1]'][] = '@'.realpath('images/'.trim($item[0])); 
а потом сложить с этим массивом $postdata и отправить

Последний раз редактировалось incognito; 13.03.2012 в 07:10.
incognito вне форума  
Старый 13.03.2012, 07:21   #8
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 13,855
Бабло: $1885685
ТС -->
Отправить сообщение для digg с помощью ICQ
автор темы ТС По умолчанию

проблема в том, что в самих названиях пхп экранирует квадратные скобки

http://php.net/manual/ru/function.http-build-query.php

Цитата:
5.1.3 Квадратные скобки экранируются.
получается, что в таком виде должен передаваться двухмерный массив

Последний раз редактировалось digg; 13.03.2012 в 07:36.
digg на форуме  
Старый 13.03.2012, 07:39   #9
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 13,855
Бабло: $1885685
ТС -->
Отправить сообщение для digg с помощью ICQ
автор темы ТС По умолчанию

если задать так
'image[1]'=>'@'.realpath('images/'.trim($item[0])),
'image[2]'=>'@'.realpath('images/'.trim($item[0])),
'image[3]'=>'@'.realpath('images/'.trim($item[0])),

в таком виде

PHP код:
Array
(
    [
image] => Array
        (
            [
1] => Array
                (
                [
name] => 2283.jpg
                
[type] => image/jpeg
                
...
            [
2] =>Array
                (
                [
name] ... 
а выдает вот так:

PHP код:
Array
(
    [
image] => Array
        (
            [
name] => Array
                (
                    [
1] => 2283.jpg
                    
[2] => 2283.jpg
                    
[3] => 2283.jpg
                
)

            [
type] => Array
                (
                    [
1] => image/jpeg
                    
[2] => image/jpeg
                    
[3] => image/jpeg
                

переставляет не туда ячейки
digg на форуме  
Старый 13.03.2012, 08:31   #10
lorien
Senior Member
 
Аватар для lorien
 
Регистрация: 18.05.2009
Сообщений: 928
Бабло: $196595
По умолчанию

Не, я имел в виду что-то типа:

Код:
array(
  [0] -> array(
      [0] ->"image[1]",
      [1] -> "@/path/",
   ),
)
__________________
TgScan - узнай Telegram группы, в которых состоит человек
lorien вне форума