0

对于网址“ http://hq.sinajs.cn/list=sh600123

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

var hq_str_sh600123="兰花科创,13.53,13.63,13.45,13.61,13.43,13.45,13.46,1113110,15047856,3200,13.45,1500,13.44,11590,13.43,369,00,13.4,6,80,00,13.4,6,86. 6400,13.47,26496,13.48,14453,13.49,3400,13.50,2013-08-30,09:44:08,00";

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

curl http://hq.sinajs.cn/list=sh600123 var hq_str_sh600123="兰花科创,13.53,13.63,13.44,13.61,13.43,13.43,13.44,1144910,15475169,39090,13.43,37100,13.42,91 13.41,235500,13.40,5800,13.39,800,13.44,41300,13.45,9800,13.46,6400,13.47,25496,13.48,2013-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 是假的,我添加了这样的详细代码:

    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";

输出是

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

POST / HTTP/1.1 Host: hq.sinajs.cn Accept: / Content-Length: 13 Content-Type: application/x-www-form-urlencoded

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

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

POST / HTTP/1.1 Host: hq.sinajs.cn Accept: / Content-Length: 13 Content-Type: application/x-www-form-urlencoded

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

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

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

提前致谢!

4

1 回答 1

1

您正在发出 HTTPGET请求的前两个示例。在您失败的 php/curl 示例中,您使用的是 HTTP POST

我怀疑你

尝试更改CURLOPT_POST选项:

curl_setopt($ch, CURLOPT_POST, 0);

以下示例适用于我。请注意,我已将查询参数添加到 url 并将 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);
于 2013-08-30T02:05:06.243 回答