cUrl установить заголовок языка

Как я могу установить заголовок языка для моего запроса cURL? например теперь я получаю домашнюю страницу facebook.com на голландском языке, вероятно, потому, что мой сервер находится в Нидерландах / язык по умолчанию отправляется заголовками?..

В этом случае я предпочитаю английский, а не голландский, поэтому я попытался установить httpheader в curl, но я не вижу смысла? Что я делаю не так или что я должен установить?

(зенд-обозначение)

CURLOPT_HTTPHEADER => 'Accept-Language: en-US;q=0.6,en;q=0.4',

Заранее спасибо!


person directory    schedule 25.02.2013    source источник


Ответы (4)


Я пришел на эту страницу в поисках способа передать заголовок языка для завивки в командной строке. Если вы хотите установить заголовки в однострочнике 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">
      ...
person doub1ejack    schedule 08.11.2016
comment
Полезно добавить -v, чтобы увидеть, какие заголовки отправляются и принимаются (например, если вы ищете, перенаправляет ли сервер вас с правильным HTTP-кодом в соответствии с указанным языком). - person Nico Prat; 19.10.2017

Вы должны добавить опцию заголовка в свой запрос.

У вас будет что-то вроде этого:

$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"),
person Ivan    schedule 30.05.2013

Этот запрос правильно работает на:

  • Английский
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-priority.en

person dorancemc    schedule 10.12.2019

Нам удалось сделать это с помощью библиотеки 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());
person Gregory Liénard    schedule 16.06.2021