以下、PHP7.0.3にて検証
CURLOPT_HTTPHEADERとCURLOPT_USERAGENT両方でユーザエージェントを指定した場合
CURLOPT_HTTPHEADERを先に書く場合.php
<?php
$ch = curl_init('google.com');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-HOGE: FUGA','user-agent: ua1']);
curl_setopt($ch, CURLOPT_USERAGENT, 'ua2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT));
// 以下出力結果
string(80) "GET / HTTP/1.1
Host: google.com
Accept: */*
X-HOGE: FUGA
user-agent: ua1
CURLOPT_USERAGENTを先に書く場合.php
<?php
$ch = curl_init('google.com');
curl_setopt($ch, CURLOPT_USERAGENT, 'ua2');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-HOGE: FUGA','user-agent: ua1']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT));
// 以下出力結果
string(80) "GET / HTTP/1.1
Host: google.com
Accept: */*
X-HOGE: FUGA
user-agent: ua1
このように、CURLOPT_HTTPHEADER
を先に書いた場合でもCURLOPT_USERAGENT
を先に書いた場合でも、CURLOPT_HTTPHEADER
で指定したユーザエージェント文字列が送信されます。
CURLOPT_USERAGENTのみでユーザエージェントを指定した場合
CURLOPT_USERAGENTのみの場合.php
<?php
$ch = curl_init('google.com');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-HOGE: FUGA']);
curl_setopt($ch, CURLOPT_USERAGENT, 'ua2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT));
// 以下出力結果
string(80) "GET / HTTP/1.1
Host: google.com
User-Agent: ua2
Accept: */*
X-HOGE: FUGA
このように、CURLOPT_USERAGENT で指定した文字列がUser-Agentリクエストヘッダとして送信されます。
CURLOPT_HTTPHEADERでユーザエージェントを指定する場合とCURLOPT_USERAGENTを使う場合の違い
CURLOPT_USERAGENT
を使うと
User-Agent: 指定したユーザエージェント
となります。
一方、CURLOPT_HTTPHEADER
では
curl_setopt($ch, CURLOPT_HTTPHEADER, ['user-agent' => 'ua']);
とすれば
user-agent: ua
となり、
curl_setopt($ch, CURLOPT_HTTPHEADER, ['UsEr-AgEnT: ua1']);
とすれば
UsEr-AgEnT: ua1
となります。
つまり、CURLOPT_HTTPHEADER
を使えばヘッダ名の大文字小文字を自由に設定できます。