2014-01-22 3 views
2

У меня есть эта ситуация: Я хочу сделать запрос PUT с помощью curl в форме, но он продолжает извлекать эту ошибку: «send failure: connection aborted». Здесь функция я использую:Соединение прерывается при публикации с помощью curl

function PutCurl($url,$parametros_post){ 
     $ch = curl_init(); 
     curl_setopt($ch,CURLOPT_URL,$url); 
     curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
     curl_setopt($ch,CURLOPT_HEADER,false); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
     curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt'); 
     curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt'); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($ch,CURLOPT_PUT,true); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: '.strlen($parametros_post))); 
     curl_setopt($ch,CURLOPT_POSTFIELDS,$parametros_post); 

     $result = curl_exec($ch); 
     $rerror = curl_error($ch); 
     curl_close($ch); 
     if ($rerror != ""){ 
      echo '<h3>'.$rerror.'</h3>'; 
      return false; 
     } 
     else 
      return $result; 

    } 

Я получаю эту ошибку:

При попытке обработать запрос:

PUT/textos-дель-Anuncio/HTTP/1.0 User-Agent: Mozilla/4.0 (совместимый; MSIE 5.01, Windows NT 5.0) Хост: www.somesite.com Прагма: нет-кэша Accept: / Cookie: PHPSESSID = gkmb7ksi1o82d91rino35ihma3 Ожидать: 100-Conti NUE соединения: Закрыть X-Forwarded-For: Ip Via: 1,0 Proxy + (v4.00 http://www.proxyplus.cz) Proxy-Authorization: Basic a2F2OjNHd3BiK3J3QiE = встречалось

следующая ошибка:

* Invalid Request 

Некоторые аспект HTTP-запроса недействителен. Возможные проблемы:

* Missing or unknown request method 
* Missing URL 
* Missing HTTP Identifier (HTTP/1.0) 
* Request is too large 
* Content-Length missing for POST or PUT requests 
* Illegal character in hostname; underscores are not allowed 

Затем я попытался установить Content-Length в заголовке, добавив следующую строку в моей функции:

curl_setopt ($ ч, CURLOPT_HTTPHEADER, массив ('Content-Length:' .strlen ($ parametros_post)));

, но затем я получаю сообщение об ошибке «Отправить отказ: соединение было прервано».

Пожалуйста, кто-нибудь, кто может мне помочь. Благодарю.

+0

Это не ваш настоящий прокси-пользователь и пароль! – BogdanM

+0

Можете ли вы опубликовать кодовые ошибки? – BogdanM

+0

Я добавил описание ошибки в сообщение. Вы можете мне помочь ? –

ответ

0

Что-то ошибиться с просьбой, вы пробовали это делать так:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); 
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); 

Таким образом, вы не используете curl_setopt ($ ч, CURLOPT_PUT, правда); но вместо этого CURLOPT_CUSTOMREQUEST. Я предполагаю, что ваш $ parametros_post является ассоциативным массивом вроде $ parametros_post = array ('post_field_name' => 'post_field_value');

+0

Ну, нет. My $ parametros_post - это строка, которую я создаю следующим образом: 'field_name ='. Urlencode ($ field_value); это работало для меня в каждом POST, который я сделал, но не сейчас, когда метод PUT. –

+0

Когда я использовал curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST, "PUT"); это не сработало. Я получил ответ с сайта, в котором говорилось, что я пропустил значения полей. –

+0

Вы пытались иметь $ parametros_post как ассоциативный массив, в то же время используя curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST, "PUT"); и curl_setopt ($ curl, CURLOPT_POSTFIELDS, http_build_query ($ data)); как в моем примере выше? – BogdanM

Смежные вопросы