Размещение изображений через CURL в форму - PullRequest
1 голос
/ 22 сентября 2011

Мне было нелегко пытаться найти решение для следующей проблемы, мне нужно использовать curl для отправки формы на веб-сайт, однако для этого нужно также загрузить изображение в обычное поле входного файла

<input type="file" name="image"/>

У меня есть класс, и функция curl определена так

function fetch($url, $username='',  $data='', $proxy=''){


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HEADER, true);


    if(isset($proxy)) {     
    curl_setopt($ch,CURLOPT_TIMEOUT,30); 
    curl_setopt($ch, CURLOPT_PROXY, $proxy); 
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, $proxy);
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'proxyadmin:parola');

    }

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_FRESH_CONNECT,true);

    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/3.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    if($username) {
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie/{$username}.txt");

    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie/{$username}.txt");
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 


    if (is_array($data) && count($data)>0){

        curl_setopt($ch, CURLOPT_POST, true);

        $params = http_build_query($data);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

    }


    if (is_array($this->headers) && count($this->headers)>0){

        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);

    }



    $this->result = curl_exec($ch);
    $curl_info = curl_getinfo($ch);
    $header_size = $curl_info["header_size"];
    $this->headers = substr($this->result, 0, $header_size);
    $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $this->error = curl_error($ch);

    curl_close($ch);    

}

Кто-нибудь может мне помочь? очень потерянный

1 Ответ

1 голос
/ 22 сентября 2011

Если вы измените следующий блок кода:

// from
if (is_array($data) && count($data)>0){
    curl_setopt($ch, CURLOPT_POST, true);
    $params = http_build_query($data);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}

// to
if (is_array($data) && count($data)>0) {
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}

И чтобы он разместил загруженный пользователем файл, настройте массив данных следующим образом:

// make sure $_FILES['file'] has been uploaded and is valid
$data = array('field' => 'value',
              'name' => 'test',
              'email' => 'something',
              'file' => '@' . $_FILES['file']['tmp_name']
             );

fetch($url, $username, $data);

Это скажет curl, чтобы отправить форму сообщения с файлом загрузки.Устанавливая поля записи в массив и добавляя & к полному пути файла, который является значением массива, curl отправит запрос на публикацию multipart / form-data с загрузкой вашего файла.

См. пример загрузки файла curl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...