Curl php youtube - PullRequest
       18

Curl php youtube

2 голосов
/ 18 сентября 2009

Привет, я пытаюсь собрать php youtube api без функции Zend

это то, что у меня есть до сих пор:

function upload() {
    $files  = $_FILES;
    $name   = $files['file']['name'];
    $type   = $files['file']['type'];
    $size   = $files['file']['size'];
    $tmp_nm = $files['file']['tmp_name'];

    $data = array('name' => 'Foo', 'file' => '@'.$tmp_nm);

    print_r($_POST);
    print_r($_FILES);

    echo 'Size '.$size;

    $headers = array( 
        "Authorization: AuthSub token=".$this->auth,
        "GData-Version: 2",
        "X-GData-Key: key=".$this->dev_key,
        "Content-length: ".$size, 
        "API_XML_request"
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/action/GetUploadToken');
    curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_REFERER,true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
    curl_setopt($ch, CURLOPT_HEADER,0);

    if($this->get_info)
    {
        $this->curlget_info($ch);
        }
    $output = curl_exec($ch);

    print_r($output);

    return $output;
}

Ошибки, которые я получаю:

Выход 1

Array ( [token] => TOKEN ) Array ( [file] => Array ( [name] => 0016.png [type] => image/png [tmp_name] => D:\wamp\tmp\php178D.tmp [error] => 0 [size] => 4216 ) ) Size 4216
Google       
Error

Length Required

POST requests require a Content-length header.

Выход 2

Array ( [token] => TOKEN ) Array ( [file] => Array ( [name] => Film.wmv [type] => video/x-ms-wmv [tmp_name] => D:\wamp\tmp\php11D3.tmp [error] => 0 [size] => 96589 ) ) Size 96589
Google       
Error

Length Required

POST requests require a Content-length header.

Я использую это руководство .

Я пытаюсь решить эту проблему в течение 5 дней, и я попросил пару каналов IRC и форумы. Друг связал меня здесь, чтобы спросить, я надеюсь, что кто-то поможет мне:))

Ответы [ 2 ]

1 голос
/ 23 сентября 2009

У меня нет ключа разработчика, поэтому я не могу помочь вам напрямую, но, очевидно, у Google есть проблема с вашим заголовком http, поэтому вы должны выяснить, что вы отправляете в заголовке, а не в теле сообщения , Лучший способ сделать это - проверить пакет на проводе, когда он покидает ваш компьютер.

Так что установите Wireshark , запустите его на своем сервере WAMP, начните захват пакетов, проведите тест, а затем посмотрите на http-соединение в пакете. Убедитесь, что это то, что вы ожидаете.

Или, может быть, есть способ для curl записать пакет в файл вместо сервера для целей отладки. Я не знаю.

Кроме того, это длинный выстрел (и он будет полагаться на то, что они не соответствуют спецификации), но я заметил, что у вас и другого человека, с которым вы связались, есть "Длина контента". Попробуйте «Content-Length», чтобы соответствовать примеру.

0 голосов
/ 18 сентября 2009

Не уверен, что это ответ, но на странице примера они ставят кавычки вокруг токена authsub:

Авторизация: токен AuthSub = "DXAA ... sdb8"

Может быть, попробовать?

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