2012-02-12 90 views
3

想知道怎樣才能將所有這些數據在一個捲曲會議,通過PHP:通過捲曲發送XML和頭

POST /feeds/api/users/default/uploads HTTP/1.1 
Host: uploads.gdata.youtube.com 
Authorization: AuthSub token="DXAA...sdb8" 
GData-Version: 2 
X-GData-Key: key=adf15ee97731bca89da876c...a8dc 
Slug: video-test.mp4 
Content-Type: multipart/related; boundary="f93dcbA3" 
Content-Length: 1941255 
Connection: close 

--f93dcbA3 
Content-Type: application/atom+xml; charset=UTF-8 

<?xml version="1.0"?> 
<entry xmlns="http://www.w3.org/2005/Atom" 
    xmlns:media="http://search.yahoo.com/mrss/" 
    xmlns:yt="http://gdata.youtube.com/schemas/2007"> 
    <media:group> 
    <media:title type="plain">Bad Wedding Toast</media:title> 
    <media:description type="plain"> 
     I gave a bad toast at my friend's wedding. 
    </media:description> 
    <media:category 
     scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People 
    </media:category> 
    <media:keywords>toast, wedding</media:keywords> 
    </media:group> 
</entry> 
--f93dcbA3 
Content-Type: video/mp4 
Content-Transfer-Encoding: binary 

<Binary File Data> 
--f93dcbA3-- 

我不明白爲什麼有一些頭,則--f93dcbA3更頭(有什麼邊界?),一些XML(爲什麼在這裏?),更多的頭文件和文件的內容。

我知道如何在沒有xml部分和'邊界'的情況下提出請求。

任何幫助將理解:d

回答

4

邊界是必需的因爲表單的enctype是multipart/form-data,而在這種情況下multipart/related。邊界是一個唯一的字符串,不能出現在請求中的任何其他位置,它用於將每個元素從表單中分離出來,無論它是文本輸入的值還是文件上載。每個邊界都有其自己的內容類型。

Curl無法爲您做multipart/related,因此您需要使用解決方法,請參閱捲曲郵件列表中的this message以獲取建議。基本上,你將不得不自己構建大部分消息。

請注意,最後一個邊界最後還有一個額外的--

此代碼應該有希望幫助您開始:

<?php 

$url  = 'http://uploads.gdata.youtube.com/feeds/api/users/default/uploads'; 
$authToken = 'DXAA...sdb8'; // token you got from google auth 
$boundary = uniqid();  // generate uniqe boundary 
$headers = array("Content-Type: multipart/related; boundary=\"$boundary\"", 
        "Authorization: AuthSub token=\"$authToken\"", 
        'GData-Version: 2', 
        'X-GData-Key: key=adf15....a8dc', 
        'Slug: video-test.mp4'); 

$postData = "--$boundary\r\n" 
      ."Content-Type: application/atom+xml; charset=UTF-8\r\n\r\n" 
      .$xmlString . "\r\n" // this is the xml atom data 
      ."--$boundary\r\n" 
      ."Content-Type: video/mp4\r\n" 
      ."Content-Transfer-Encoding: binary\r\n\r\n" 
      .$videoData . "\r\n" // this is the content of the mp4 
      ."--$boundary--"; 


$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$response = curl_exec($ch); 
curl_close($ch); 

希望有所幫助。

+0

非常感謝你! – greenbandit 2012-02-12 21:16:34