PHP网络编程(与网络互联)

一、 访问其他网站

① 直接以类似于访问自己硬盘上一个文本文件的方式来访问其他网站:

fopen('http://www.example.com/','r');

# fopen用来打开网页时其参数不变(仍然是'r','w'和'a'),不过现在我们访问的其他网站,所以只能和只读('r')的方式打开

## 必须在文件夹之后加一个反斜杠,因为fopen()函数不支持重定向,否则将会出错。

### PS:若是想要实现此功能并长期使用之前,我们应该先去调查一下其他网站上检索数据的合法性。大部分网站包含具有版权的信息。

② 完整例子:

<?php
if(isset($_GET['symbol']) && !empty($_GET['symnol'])) {
      $url = sprintf('http://quote.yahoo.com/d/quotes.csv/s=%s&f=nl1',$_GET['symbol']);
$fp = fopen($url,'r');
$read = fgetcsv($fp);
fclose($fp);
if(strcasecmp($read[0], $_GET['symbol'] != 0 )){
echo '<div>The lastest value for <span class="quote">'.$read[0].'</span>(<span class="quote">'.$_GET['symbol'].'</span>) is $<span class="quote">'.$read[1].'</span>';
}else{
    echo '<div class="error">Invalid symbol</div>';
}
}
?>

二、PHP scoket编程

1. 含义

    即两台计算机相互通信的通道

2. 使用

① 打开一个socket

$fp = fsockopen($url,$port,$error_number,$error_string,$timeout);

# 参数对应

fsockopen(URL,端口号,一个存放错误编号的变量,一个存放错误信息字符串的变量,超时等待时间));

## 只有第一个参数是必要的

② purse_url()

这个函数输入一个URL,通过将其结构分解成几个部分来将其转变为一个关联数组

# 组成URL的几个基本部分分别为:协议名(scheme)、主机名(host)、端口号(port)、文件路径(path)、查询参数(query)

③ 完整例子

<?php
function check_url($url){
$url_parse = parse_url($url);
$path = (isset($url_parse['path'])) ? $url_parse['path'] : '/';
$port = (isset($url_parse['port'])) ? $url_parse['port'] : '80';
if($fp = fsockopen($url_parse['host'], $port, $errno, $error, 30)){
$send = "HEAD $path HTTP/1.1\r\n";
$send .= "HOST:{$url_parse['host']}\r\n";
$send .= "CONNECTION:Close\r\n\r\n";
fwrite($fp, $send);
$data = fget($fp,128);
fclose($fp);
list($response,$code) = explode(' ', $data);
if($code == 200){
return array($code, 'good');
}else{
return array($code, 'bad');
}
}else{
return array($code, 'bad');
}
}
$urls = array(
'http://www.larryullman.com/',
'http://www.larryullman.com/wp-admin/',
'http://www.yiiframework.com/tutorials/',
'http://video.google.com/videoplay?docid=5137581991288263801&q=loose+change'
);
echo "<h2>Validating URLs</h2>";
set_time_limit(0);
foreach ($urls as $url) {
list($code, $class) = check_url($url);
echo '<p><a href="\'$url\" target="\'hew\">$url</a>(<span class="\$class\">$code</span>)</p>\n';
}
?>

三、使用IP地址查询

  下面的例子会使用一个与网络相关的PHP函数:gethostbyname()函数。该函数返回给定域名的IP地址。

  要使用IP地址进行地理地址查询,必须连接到GeoIP数据库。这里使用由freegeoip.net提供的简单的在线服务

  其请求路径格式要求为:http://freegeoip.net/(数据格式)/(要查询的IP地址)

  完整示例如下:

<?php
function show_ip_info($ip){
$url = 'http:/freegeoip.net/csv/' .$ip;
$fp = fopen($fp);
$read = fgetcsv($fp);
fclose($fp);
echo "<p>IP Address: $ip<br/>
Country:$read[2]<br/>
City, State:$read[5],$read[3]<br/>
Latitude:$read[7]<br/>
Longtude:$read[8]</p>";
}
echo '<h2>Our spies tell us the following informatin about you<br/>';
show_ip_info($_SERVER['REMOTE_ADDR']);
$url = 'www.etropy.ch';
echo '<h2>Our spies tell us the following informatin about the URL $url</h2>';
show_ip_info(gethostbyname($url));
  ?>

  四、使用CURL

  1. 初始化

curl_init('www.example.com'); 或 curl_init();

  2. 执行函数

curl_exec($curl);

  3. CURL方法:

  ① 如果发生错误,直接运行失败:CURLOPT_FAILONERROR

curl_setopt($curl, CURLOPT_FOLLOWERROR,1);

  ② 支持重定向:CURLOPT_FOLLOWLOCATION

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

  ③ 设置是否将处理结果存入一个变量的选项:CURLOPT_RETURNTRANSFER

curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);

  ④ 设置超时时间:CURLOPT_TIMEOUT

# 设置尝试执行该事务的时长,以秒为单位,在互联网的时间时,5秒简直就是“无限长”了

  curl_setopt($curl, CURLOPT_TIMEOUT, 5);

  ⑥ 设置curl使用POST方法:CURLOPT_POST

  curl_setopt($curl, CURLOPT_POST, 1);

  ⑦ 设置POST数据:CURLOPT_POSTFIELED

curl_setopt($curl, CURLOPT_POSTFIELED, 'name=foo&pass=bar&format=csv');

  ⑧ 如果网页有HTTP身份验证保护,请使用如下设置:CURLOPT_USERPWD

curl_setopt($curl, CURLOPT_USERPWD, 'username:password');

  4. 完整示例

<?php
$url = 'http://localhost/service.php';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);;
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'name=foo&pass=bar&format=csv');
$r = curl_exec($curl);
curl_close();
print_r($r);
?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能...
    司马东阳阅读 5,309评论 0 6
  • 原文地址:PHPcURL库函数抓取页面内容(转)作者:巴克 cURL是一个利用URL语法规定来传输文件和数据的工具...
    司马东阳阅读 4,930评论 0 3
  • 转载自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce阅读 6,932评论 1 5
  • “至亲至疏夫妻”这句诗,出自唐代诗人李冶的《八至》。我想等我再吃多几年米饭,一定对这首诗有更多的感受,就如我读《红...
    小路灯阅读 9,073评论 8 8
  • 今天大概是来南京感觉最冷的一天,办公室里有空调,开了也没用,不如不开。 七点下班,站在空荡荡的站台...
    七七行记阅读 2,548评论 0 0

友情链接更多精彩内容