PHP cURL函数相关-浏览器访问、linux cURL命令和PHP cURL功能之间有什么区别.url的


PHP cURL function related - what is the difference between browser visit, linux curl command and PHP cURL function?

http://hq.sinajs.cn/list=sh600123"

我可以通过任何浏览器获得响应,结果如下,

var hq_str_sh600123="兰花科创,13.53,13.63,1345,13.61,13.43,13.45,13461113110150478563200,13.451500,13.4411590,13.4336900,13.4268900,13.419800,13.466400,13.4726496,13.4814453,13.493400,13.502013-08-30,09:44:08,00";

我也可以从linux curl命令中获得相同的响应

卷曲http://hq.sinajs.cn/list=sh600123var hq_str_sh600123="兰花科创,13.53,13.63,13.44,13.61,13.43,13.43,13.43,134141449101547516939090,13.4337100,13.4291000,13.41235500,13.405800,13.39800,13.4441300,13.459800,13.466400,13.4725496,13.482013-08-30,09:44:43,00";

但最大的问题是我无法从PHP cURL函数中得到正确的响应

我的主干代码是这样的,已经删除了业务逻辑

 $url = "http://hq.sinajs.cn/";//the url
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // the result could be got by the return value
 curl_setopt($ch, CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' )); // this line is added according to the advice from the internet
 curl_setopt($ch, CURLOPT_URL,$url);
 $post_data = "list=".urldecode($code); // here the code can be "sh600485"
 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
 $result = curl_exec($ch);

$result为false,我添加了如下详细代码:

    curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $verbose = fopen('php://temp', 'rw+'));
echo "Verbose information:'n<pre>", !rewind($verbose), htmlspecialchars(stream_get_contents($verbose)), "</pre>'n";

输出为

详细信息:*即将连接()到hq.sinajs.cn端口80(#0)*正在尝试202.108.37.102。。。*已连接*接hq.sinajs.cn(202.108.37.102)端口80(#0)

POST/HTTP/1.1主机:hq.sinajs.cn接受:/内容长度:13内容类型:application/x-www-form-urlencoded

  • 上传完全发送:13个字节中的13个
  • 来自服务器的空答复
  • 与主机hq.sinajs.cn的连接#0保持原样

详细信息:*连接#0似乎已断开!*正在关闭连接#0*即将连接()到hq.sinajs.cn端口80(#0)*正在尝试202.108.37.102。。。*已连接*接hq.sinajs.cn(202.108.37.102)端口80(#0)

POST/HTTP/1.1主机:hq.sinajs.cn接受:/内容长度:13内容类型:application/x-www-form-urlencoded

  • 上传完全发送:13个字节中的13个
  • 来自服务器的空答复
  • 与主机hq.sinajs.cn的连接#0保持原样

我的问题是,为什么与结果的差异如此之大?

  1. 网站服务器的根本原因是什么?它禁止PHP cURL访问吗
  2. 如何解决这个问题

提前感谢!

前两个例子中,您正在进行HTTP GET请求。在您失败的php/ccurl示例中,您使用的是HTTPPOST

我怀疑你是

尝试更改CURLOPT_POST选项:

curl_setopt($ch, CURLOPT_POST, 0);

下面的例子适用于我。请注意,我已经在url中添加了query参数,并将HTTP方法更改为GET

<?php
$url = "http://<INSERT URL HERE>?list=sh600123";
//                              ^ use query params instead of post values...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$result = curl_exec($ch);
var_dump($result);