我可以帮您进行翻译。下面是翻译的结果:
这是我拥有的内容:
转储结果显示,curl将Content-Type更改为application/x-www-form-urlencoded,而Youtube当然不支持它。我将二进制内容(视频)放入CURLOPT_POSTFIELDS中,也许这是错误的,但我不知道如何设置请求体。那么,我该如何保留我设置的Content-Type呢?
我想从我的服务器直接上传视频到Youtube,我正在使用PHP curl。
我需要的请求格式如下:
POST /feeds/api/users/default/uploads HTTP/1.1
Host: uploads.gdata.youtube.com
Authorization: Bearer ACCESS_TOKEN
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--
这是我拥有的内容:
$content = $this->buildRequestContent();
$ch = curl_init();
$curlConfig = array(
CURLOPT_URL => 'http://uploads.gdata.youtube.com/feeds/api/users/default/uploads',
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_BINARYTRANSFER => true,
CURLOPT_POSTFIELDS => $content,
CURLOPT_HTTPHEADER, array(
"Authorization" => sprintf("GoogleLogin auth=%s", $this->accessToken),
"GData-Version" => 2,
"X-GData-Key" => sprintf("key=%s", $this->developerKey),
"Slug" => sprintf("%s", $this->video->getFilename()),
"Content-Type" => sprintf("multipart/related; boundary=\"%s\"", $this->boundaryString),
"Content-Length" => strlen($content),
"Connection" => "close"
),
);
curl_setopt_array($ch, $curlConfig);
$result = curl_exec($ch);
转储结果显示,curl将Content-Type更改为application/x-www-form-urlencoded,而Youtube当然不支持它。我将二进制内容(视频)放入CURLOPT_POSTFIELDS中,也许这是错误的,但我不知道如何设置请求体。那么,我该如何保留我设置的Content-Type呢?
CURLOPT_POST
会自动将Content-Type
设置为application/x-www-form-urlencoded
。尝试设置此选项和CURLOPT_HEADER
,可以使用单个语句,或者至少在设置方法后使用curl_setopt
将后者设置为单个语句。 - Havelock