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保持原样
我的问题是,为什么与结果的差异如此之大?
- 网站服务器的根本原因是什么?它禁止PHP cURL访问吗
- 如何解决这个问题
提前感谢!
前两个例子中,您正在进行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);