14

如何为我的 cURL 请求设置语言标头?例如,现在我用荷兰语获得了 facebook.com 的主页,可能是因为我的服务器在荷兰/默认语言由标题发送?..

在这种情况下,我更喜欢英语而不是荷兰语,所以我尝试在 curl 中设置一个 httpheader 但我没有任何意义?我做错了什么或者我应该设置什么?

(zen 符号)

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

提前致谢!

4

4 回答 4

17

我来到这个页面,寻找一种将语言标题传递到命令行的方法。如果要在 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">
      ...
于 2016-11-08T18:01:58.943 回答
4

您必须在请求中添加标头选项。

你会有这样的东西:

$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"),
于 2013-05-30T10:03:36.190 回答
3

此请求适用于:

  • 英语
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

于 2019-12-10T20:49:53.713 回答
0

我们设法使用使用 libcurl 的 curlthin 库来做到这一点:

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());
于 2021-06-16T07:08:28.023 回答