Выполнение запроса PUT с использованием CURL в PHP - PullRequest
1 голос
/ 08 февраля 2012

Я использую PHP 5.3.6, и кажется, что я не могу сделать запрос PUT, используя CURL для PUTting только строки.

function put_data($url, $data)
{   
  $useragent="SimpleAgent-1.0";
  $fh = fopen('php://memory', 'rw');
  fwrite($fh, $data);
  rewind($fh);$ch = curl_init();
  curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  curl_setopt($ch, CURLOPT_INFILE, $fh);
  curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data));
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  curl_setopt($ch, CURLOPT_PUT, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);
  fclose($fh);

  return $result;
}

Здесь $ data - это строка, которую я хочу PUT,Не работает и возвращает следующую ошибку:

500 Внутренняя ошибка сервера Сервер либо ошибся, либо не может выполнить запрошенную операцию.

ожидаемая строка или буфер

Ответы [ 2 ]

0 голосов
/ 17 августа 2012

Я могу передать массив только как данные с версиями, которые я использую.Вот что я делаю сейчас:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_COOKIE, $curl_cookie);
$arr = array();
if (isset($data)) {
    $arr['my_data'] = $data;
}

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arr));
curl_exec($ch);
0 голосов
/ 10 февраля 2012

Я использовал ваш код, поэтому определил URL-адрес и заполнил данные строкой, и все работало, как ожидалось. Я был отклонен сайтом, так как не было ни одного получателя, который мог бы справиться с путом. Чтобы получить информацию легко просто добавьте строку curl_setopt($ch, CURLOPT_VERBOSE, true);

и вы получите что-то вроде:

* About to connect() to yyyy.xxxx.com port 80 (#0)
*   Trying 62.221.196.28...
* connected
* Connected to yyyy.xxxx.com (zz.221.196.28) port 80 (#0)
> PUT / HTTP/1.1
User-Agent: SimpleAgent-1.0
Host: yyyy.xxxx.com
Accept: */*
Content-Length: 14
Expect: 100-continue

< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 405 Method Not Allowed
< Date: Thu, 09 Feb 2012 19:46:28 GMT
< Server: Apache
< Allow: GET,HEAD,POST,OPTIONS
< Vary: Accept-Encoding
< Content-Length: 231
< Content-Type: text/html; charset=iso-8859-1
< 
* Connection #0 to host yyy.xxxx.com left intact
* Closing connection #0

Как видно из журнала, запрос вышел, однако, когда вы хотите поместить данные, настройка apache не позволяет вам помещать данные в этот URL. Таким образом, в зависимости от сервера вам придется позаботиться о получении URL-адреса, который принимает PUT.

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