cUrl установить языковой заголовок
Как я могу установить языковой заголовок для моего запроса cURL? например, теперь я получаю домашнюю страницу facebook.com на голландском языке, возможно, потому что мой сервер на нидерландском языке / язык по умолчанию отправляется заголовками?..
Я предпочитаю английский перед голландским в этом случае, поэтому я попытался установить httpheader в curl, но я не имею смысла? Что я делаю неправильно или что я должен установить?
(Zend обозначение)
CURLOPT_HTTPHEADER => 'Accept-Language: en-US;q=0.6,en;q=0.4',
Заранее спасибо!
4 ответа
Я прибыл на эту страницу в поисках способа передать заголовок языка в curl в командной строке. Если вы хотите установить заголовки в однострочную версию bash, используйте -H Accept-Language
$ curl -s -H 'Accept-Language: es' -XGET "http://www.google.com"
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="es-419">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<meta content="/logos/doodles/2016/united-states-elections-2016-4829342880235520-hp.gif" itemprop="image">
<meta content="Tu voz importa. �Encuentra tu casilla y vota! g.co/elections/dondevotar #Everyonein2016 #GoogleDoodle" property="og:description">
...
Вы должны добавить опцию заголовка в вашем запросе.
У вас будет что-то вроде этого:
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
.....
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch);
$header = curl_getinfo($ch);
curl_close($ch);
Все, что вам нужно сделать, это добавить эту строку в ваш массив $options:
CURLOPT_HTTPHEADER => array("Accept-Language: en-US;q=0.6,en;q=0.4"),
Этот запрос правильно работает на:
- английский
curl -s -H 'Accept-Language: en-US,en;q=0.9,it;q=0.8' -XGET "http://www.google.com" | lynx -dump -stdin
- испанский язык
curl -s -H 'Accept-Language: es-CO,es;q=0.9,it;q=0.8' -XGET "http://www.google.com" | lynx -dump -stdin
- португальский
curl -s -H 'Accept-Language: pt-BR,pt;q=0.9,it;q=0.8' -XGET "http://www.google.com" | lynx -dump -stdin
Я не разбирался в приоритетах, но это необходимо для правильной работы.
О приоритетах можно найти дополнительную информацию здесь https://www.w3.org/International/questions/qa-lang-priorities.en
Нам удалось это сделать с помощью библиотеки curlthin, которая использовала libcurl:
string strAcceptLanguage = string.Format("{0}-{1};q=0.5,{0};q=0.3", Lang, Country.ToUpper());
// Initialize HTTP header list with first value.
var headers = CurlNative.Slist.Append(SafeSlistHandle.Null, strAcceptLanguage);
// Configure libcurl easy handle to send HTTP headers we configured.
CurlNative.Easy.SetOpt(easy, CURLoption.HTTPHEADER, headers.DangerousGetHandle());