gpt4 book ai didi

php - 通过 curl 发送 xml 和 header

转载 作者:可可西里 更新时间:2023-11-01 01:06:40 25 4
gpt4 key购买 nike

想知道如何通过 php 在 curl session 中设置所有这些数据:

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--

我不明白为什么有一些 header ,然后 --f93dcbA3 更多 header (边界是什么?),一些 xml(为什么在这里?),更多 header 和文件内容.

我知道如何在没有 xml 部分和“边界”的情况下发出请求。

任何帮助将不胜感激:D

最佳答案

边界是必需的,因为表单 enctype 是 multipart/form-data,而不是在这种情况下 multipart/related。边界是一个唯一的字符串,不能出现在请求的任何其他地方,它用于将每个元素与表单分开,无论是文本输入的值,还是文件上传的值。每个边界都有自己的内容类型。

Curl 无法为您执行multipart/related,因此您需要使用变通方法,请参阅this message从 curl 邮件列表获取建议。基本上,您必须自己构建大部分消息。

请注意,最后一个边界在末尾有一个额外的--

此代码有望帮助您入门:

<?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);

希望对您有所帮助。

关于php - 通过 curl 发送 xml 和 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com