stream函数有人熟悉吗? 利用 stream_socket_client 、 fwrite 函数,根据手册上的例子获取域名对应的首页是没问题的,或许内页,始终是 400错误?有没有能做成功的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 贴你的代码。肯定是HTTP header格式不正确 <?php$retdata = '';$fp = stream_socket_client("www.jxcms.com:80/download/", $errno, $errstr, 30);if (!$fp) { echo "$errstr ($errno)<br />\n";} else { fwrite($fp, "GET / HTTP/1.0\r\nHost: www.jxcms.com/download/\r\nAccept: */*\r\n\r\n"); while (!feof($fp)) { $retdata .= fgets($fp, 1024); } fclose($fp);}$strs = explode("\r\n\r\n", $retdata, 2);echo isset($strs[1])?$strs[1]:$retdata;?> fwrite($fp, "GET /download/ HTTP/1.0\r\nHost: www.jxcms.com\r\nAccept: */*\r\n\r\n"); 改进了下,可以获取了,那个HTTP header抄了fsock方式获取信息的代码,下面的代码请高手指教,是否可以再优化下。<?php$retdata = '';$tmp = parse_url('http://www.jxcms.com/download/');$host = $tmp['host'];$path = $tmp['path'];empty($tmp['query']) or $path .= '?' . $tmp['query'];if (empty($tmp['port'])) { $port = $tmp['scheme'] == 'https' ? 443 : 80;} else $port = $tmp['port'];$fp = stream_socket_client("$host:$port", $errno, $errstr, 30);if (!$fp) { echo "$errstr ($errno)<br />\n";} else { $user_agent = $_SERVER['HTTP_USER_AGENT']; $tmp = "GET $path HTTP/1.1\r\n"; $tmp .= "Host: $host\r\n"; $tmp .= "User-Agent: $user_agent\r\n"; $tmp .= "Connection: Close\r\n\r\n"; fwrite($fp, $tmp); while (!feof($fp)) { $retdata .= fgets($fp, 1024); } fclose($fp);}$strs = explode("\r\n\r\n", $retdata, 2);echo isset($strs[1])?$strs[1]:$retdata;?> $context = stream_context_create( array( 'header'=> array('User-Agent'=>$_SERVER['HTTP_USER_AGENT']) ));echo file_get_contents('http://www.jxcms.com/download/', false, $context);如果要获取header报头 可以参看: $http_response_header 预定义局部变量 sorry stream_context_create()的参数格式我给弄错了$options = array( 'http'=> array( 'header'=> array("User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n") ));$context = stream_context_create($options); 如何查一个网站的空间服务商 两个个正则表达式的问题 php读写pgsql里的数组 谁是PHP开发高手? 如何修改网站页脚的文本 请教 关于PHP中数组赋值的问题 如何点击复制单元格 加载页面时的问题 模板给我带来了什么?一点疑问,请大家论论 网络时代,我应选择什么,asp??php??jsp?? 发表回帖的实现过程 请问现在流行的PHP扩展库是什么?
$retdata = '';
$fp = stream_socket_client("www.jxcms.com:80/download/", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.jxcms.com/download/\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
$retdata .= fgets($fp, 1024);
}
fclose($fp);
}
$strs = explode("\r\n\r\n", $retdata, 2);
echo isset($strs[1])?$strs[1]:$retdata;
?>
$retdata = '';
$tmp = parse_url('http://www.jxcms.com/download/');
$host = $tmp['host'];
$path = $tmp['path'];
empty($tmp['query']) or $path .= '?' . $tmp['query'];
if (empty($tmp['port'])) {
$port = $tmp['scheme'] == 'https' ? 443 : 80;
} else $port = $tmp['port'];
$fp = stream_socket_client("$host:$port", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$tmp = "GET $path HTTP/1.1\r\n";
$tmp .= "Host: $host\r\n";
$tmp .= "User-Agent: $user_agent\r\n";
$tmp .= "Connection: Close\r\n\r\n";
fwrite($fp, $tmp);
while (!feof($fp)) {
$retdata .= fgets($fp, 1024);
}
fclose($fp);
}
$strs = explode("\r\n\r\n", $retdata, 2);
echo isset($strs[1])?$strs[1]:$retdata;
?>
array('User-Agent'=>$_SERVER['HTTP_USER_AGENT'])
)
);
echo file_get_contents('http://www.jxcms.com/download/', false, $context);如果要获取header报头 可以参看: $http_response_header 预定义局部变量
$options = array(
'http'=> array( 'header'=>
array("User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n")
)
);
$context = stream_context_create($options);