我们正试图专门从纳斯达克交易所提取类似于https://docs.google.com/spreadsheets/d/18-Y5aLvJxyeF142KgpTq0QpXQkwkrx8ggtHVFuPhmqM/edit#gid=0的股息数据
几乎所有其他网址都可以正常工作,但此处的查询不起作用。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.nasdaq.com/symbol/wmt/dividend-history');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode>=200 && $httpcode<300) ? $data : false;
?>
我们已经战斗了几个小时,并决定最终寻求帮助。如果有帮助的话
From strace;
sendto(3, "\26\3\3\0F\20\0\0BA\0045!\232\223\305\251?::\370\207\310\263?\347~\213\325zM?"..., 126, 0, NULL, 0) = 126
recvfrom(3, 0x5561748dce48, 5, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}], 1, 1000) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3, "\24\3\3\0\1", 5, 0, NULL, NULL) = 5
recvfrom(3, "\1", 1, 0, NULL, NULL) = 1
recvfrom(3, "\26\3\3\0(", 5, 0, NULL, NULL) = 5
recvfrom(3, "v\34\t\251\360\370\371B\224s\6O[\7\301[\372\372\365\354\227x\355\351~2\306\2X\210{\220"..., 40, 0, NULL, NULL) = 40
sendto(3, "\27\3\3\0\273\0\0\0\0\0\0\0\1\322\262(\36\227o#\216\315P\331\255\232\300\211\5\\\236\247"..., 192, 0, NULL, 0) = 192
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
poll([{fd=3, events=POLLIN}], 1, 643) = 0 (Timeout)
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
sendto(3, "\25\3\3\0\32\0\0\0\0\0\0\0\2\371\251tc7\341\t\317\307h\273'\f\321r\3R\331", 31, 0, NULL, 0) = 31
close(3)
[root@dev01 ~]# ls -l /proc/3/fd
total 0
编辑:它根本不返回任何信息。
答案 0 :(得分:1)
这似乎是由您的CURL_USERAGENT字符串引起的。当我将其更改为curl_setopt($ ch,CURLOPT_USERAGENT,'curl / 7.29.0')时,即直接从服务器卷曲URL时发送的同一用户代理,它将毫无问题地获取数据。
<?php
echo "Pre-init\n";
$ch = curl_init();
echo "Post-init\n";
curl_setopt($ch, CURLOPT_URL, 'https://www.nasdaq.com/symbol/wmt/dividend-history');
#curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_USERAGENT, 'curl/7.29.0');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
echo "Post config\n";
$data = curl_exec($ch);
echo "curl_exec finished\n";
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "http code\n";
echo $httpcode;echo "\n";
curl_close($ch);
echo "Connection successfully closed\n";
echo "Data?\n";
echo $data;
return ($httpcode>=200 && $httpcode<300) ? $data : false;
echo "End script\n";
?>