Клуб API Вебмастера

PUT Запрос проверки подтверждения сайта - не работает

Люди добрые! Скажите, что я делаю не так? Вылезает ошибка 

411 Length Required

Хотя я вроде указал Content-Length.



$handle=curl_init() ;

$headers = array('Authorization: OAuth xxxxxxxxxxxxxxxxxxxxxxxxxx', 'Content-Type: application/xml', 'Content-Length: '. strlen(urlencode('<host><type>TXT_FILE</type></host>'))

curl_setopt($handle, CURLOPT_URL, "https://webmaster.yandex.ru/api/v2/hosts/12341234/verify");

curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);

curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);

curl_setopt($handle, CURLOPT_PUT, true);

curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('<host><type>TXT_FILE</type></host>')

$response=curl_exec($handle);

$code=curl_getinfo($handle, CURLINFO_HTTP_CODE); 

curl_close($handle);

2 комментария

Если установлена опция CURLOPT_PUT, то тело запроса берется из CURLOPT_INFILE а не из CURLOPT_POSTFIELDS. Чтобы совершить PUT запрос без участия файлов, можно вместо CURLOPT_PUT использовать:
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, "PUT");

Спасибо, помогли! 

Вот такой вариант заработал: 

 

$handle=curl_init() ;

$headers = array('Authorization: OAuth xxxxxxxxxxxxxxxxxxxxxxx','Content-Length: '. strlen(urlencode('<type>TXT_FILEt>')));

curl_setopt($handle, CURLOPT_URL, "https://webmaster.yandex.ru/api/v2/hosts/12341234/verify");

curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);

curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($handle, CURLOPT_CUSTOMREQUEST, "PUT");

curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');

curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('TXT_FILE'));

$code=curl_getinfo($handle, CURLINFO_HTTP_CODE); 

$response=curl_exec($handle);

curl_close($handle);