PHP - 使用cURL时无法设置头信息

3
使用cURL访问文件时,它会忽略文件中设置的头信息。如果我直接通过浏览器访问同一文件而不使用cURL,则可以正常工作并正确设置头信息。有人知道为什么会这样,并且如何解决这个问题吗?
我正在编写一个API,需要在Web服务中设置HTTP头响应,而不是在用于通过cURL连接到文件的文件中设置。希望这样说清楚了。
谢谢!

这是一个非常庞大的项目,有很多代码。我基本上为API中的每个资源都有一个controller.php文件。在controller.php中,根据用户通过cURL发送到API的请求,会有各种HTTP响应。例如:header('HTTP/1.1 200 OK' ); 或 header('HTTP/1.1 401 Unauthorized' ); 然而,当通过cURL访问controller.php时,这些响应被忽略了。如果我直接使用浏览器访问controller.php,则可以正常工作。 - LeeTee
3个回答

2

由于您正在使用CURL,尝试将此作为您的用户代理

curl_setopt($c_link, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)");

或者

curl_setopt($c_link, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

您可以从Firefox复制标题,它可能看起来像这样。
$header = "Accept: text/xml,application/xml,application/xhtml+xml,";
  $header = "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  $header = "Cache-Control: max-age=0";
  $header = "Connection: keep-alive";
  $header = "Keep-Alive: 300";
  $header = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  $header = "Accept-Language: en-us,en;q=0.5";
  $header = "Pragma: ";

我需要将标头设置与cURL设置分开。API的用户将使用cURL访问资源,我的Web服务需要能够设置不同的HTTP响应。我不明白Firefox的标头如何帮助,请解释一下。谢谢。 - LeeTee

1

curl_setopt($ch, CURLOPT_HEADER, <true or false>);

这可能会对您有所帮助。

或者,如果想要精确地设置HTTP头,则可以:

curl_setopt($ch, CURLOPT_HTTPHEADER,array(<header parameters>));

这可能是一个解决方案。


我需要在用户建立cURL连接之后设置头参数,如果这样说有意义的话。因此,这种方法行不通。或者是我误解了? - LeeTee

0

我认为这会对你有所帮助

//open connection
$ch = curl_init();


//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,"URL");
curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch,CURLOPT_HTTPHEADER, array('newVar:newValue','Content-type: text/plain', 'Content-length: 100')); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 

//execute post
ob_clean();
$result = curl_exec($ch);
echo $result;
curl_close($ch);

我猜您发布这篇文章是为了演示如何使用CURLOPT_HTTPHEADER传递标头信息?如果是这样,问题在于API的用户将自己设置cURL,而我的API需要根据用户请求更改标头HTTP响应。 - LeeTee
我不理解你所提供的解决方案,其中哪一点可以解决我的问题?你能解释一下这如何解决我的问题吗?非常感谢,因为我对此完全不了解。 - LeeTee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接