curl之CURLOPT_HTTPHEADER设置header头,还能实现不用设置Hosts把域名指定到某IP下。

jackxiang 2010-1-28 15:38 | |
curl之CURLOPT_HTTPHEADER

单个

    <?php
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\n"));
    ?>
多个

    <?php
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\nOtherheader: stuff\n"));
    ?>


我们在不设置host的时候提交到虚拟主机后,会出现:


Tencent:/usr/local/tads/htdocs/mhxy2010hn.act/crontab # curl "http://172.23.129.11*/user_v3/freere*g.php?act_id=109353"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /user_v3/freereg.php was not found on this server.</p>
</body></html>


设置host后就能找到了。

curl为我们用了CURLOPT_HTTPHEADER来做host的工作:



function curl_post($host, $data)
{

  $ch = curl_init();
  $res= curl_setopt ($ch, CURLOPT_URL,$host);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt ($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: act.*.qq.com"));

  $xyz = curl_exec ($ch);

  //echo $xyz;

  if ($xyz == NULL) {
       return 0;
  }

  return $xyz;

}



相当于:

172.23.129.*  act.*.qq.com


这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。

—————————————————————————————————————————————————
用Curl直接模拟Host如下:

以上摘录自:http://jackxiang.com/post/4022/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2656/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-12-3 10:38
评论列表
2010-7-2 16:46 | fc_lamp Homepage
good
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]