Я отправляю запрос "playlistItems" с этими заголовками:
array(5) {
[0]=>
string(29) "Content-Type:application/json"
[1]=>
string(153) "Authorization:Bearer [hidden]"
[2]=>
string(33) "X-JavaScript-User-Agent:Automator"
[3]=>
string(66) "If-Match:"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/AtpZMDGfwUXtVHbcH_1spJYn8eg""
[4]=>
string(71) "If-None-Match:"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/AtpZMDGfwUXtVHbcH_1spJYn8eg""
}
URL-адрес: https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=UUvmF_tzu-eK6FRfMlOp6-Fg
Но я получаю ETag, отличный от другого без изменения содержимого.
Youtube V3 действительно поддерживает ETag?или заголовки неверны?
Я не использую официальную библиотеку.Мой код использует PHP и Curl.
$this->execute(
"playlistItems",
array("part"=>"id,snippet","playlistId"=>$channelId)
,$etag
);
И
public function execute($source, $options, $etag = null)
{
if (count($options)==0) {
$url=$this->base_url.$source;
} else {
$vars=array();
foreach ($options as $key => $value) {
$vars[]=$key."=".urlencode($value);
}
$vars=implode("&", $vars);
$url=$this->base_url.$source."?".$vars;
}
$httpheader=array(
'Content-Type'=>'application/json',
'Authorization'=>'Bearer ' . $this->token,
'X-JavaScript-User-Agent'=>'Automator'
);
if ($etag!=null) {
$httpheader["If-Match"]='"'.$etag.'"';
$httpheader["If-None-Match"]='"'.$etag.'"';
}
$client=new \Conect\Request();
$request=$client->get($url, array("headers"=>$httpheader));
$this->etag="";
if (array_key_exists("ETag", $request->headers_out)) {
$this->etag=$request->headers_out['ETag'];
}
$this->last_request=$request;
$this->etag=str_replace('"', "", $this->etag);
$this->etag=trim($this->etag);
if ($request->code==304) {
throw new ExceptionNoChange("No changes");
}
return $this->response($request->data);
}
Раздел "\ Conect \ Request"
if (array_key_exists("headers", $options)) {
$headers_in=array();
foreach ($options['headers'] as $key => $value) {
$headers_in[]=$key.":".$value."";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_in);
$this->headers_in=$headers_in;
}
Действие : Я отправил запрос с ETag
Ожидается : Http-код 304
Результат : Http 200 с новым ETag.