HTTP 笔记与总结(3 )socket 编程:发送 GET 请求

使用 PHP + socket 模拟发送 HTTP GET 请求,过程是:

① 打开连接

② 构造 GET 请求的数据:写入请求行、请求头信息、请求主体信息(GET 请求没有主体信息)

③ 发送 GET 请求

④ 读取(响应)

⑤ 关闭连接

【例】PHP + socket 编程,发送 GET 请求

<?php
/*
	PHP + socket 编程
	@发送 HTTP GET 请求
*/

//http 请求类的接口
interface Proto{
	//连接 url
	function conn($url);

	//发送 GET 请求
	function get();

	//发送 POST 请求
	function post();

	//关闭连接
	function close();
}

class Http implements Proto{

	//换行符
	const CRLF = "\r\n";

	//fsocket 的错误号与错误描述
	protected $errno = -1;
	protected $errstr = ‘‘;

	//响应内容
	protected $response = ‘‘;

	protected $url = null;
	protected $version = ‘HTTP/1.1‘;
	protected $fh = null;

	protected $line = array();
	protected $header = array();
	protected $body = array();

	public function __construct($url){
		$this->conn($url);
		$this->setHeader(‘Host:‘ . $this->url[‘host‘]);
	}

	//写请求行
	protected function setLine($method){
		$this->line[0] = $method . ‘ ‘ . $this->url[‘path‘] . ‘ ‘ . $this->version;
	}

	//写头信息
	protected function setHeader($headerline){
		$this->header[] = $headerline;
	} 

	//写主体信息
	protected function setBody(){

	}

	//连接 url
	public function conn($url){
		$this->url = parse_url($url);
		//判断端口
		if(!isset($this->url[‘port‘])){
			$this->url[‘port‘] = 80;
		}
		$this->fh = fsockopen($this->url[‘host‘], $this->url[‘port‘], $this->errno, $this->errstr, 3);
	}

	//构造 GET 请求的数据
	public function get(){
		$this->setLine(‘GET‘);
		//发送请求
		$this->request();
		return $this->response;
	}

	//构造 POST 请求的数据
	public function post(){

	}

	//发送请求
	public function request(){
		//把请求行、头信息、主体信息拼接起来
		$req = array_merge($this->line, $this->header, array(‘‘), $this->body, array(‘‘));
		$req = implode(self::CRLF, $req);
		//echo $req;

		fwrite($this->fh, $req);

		while(!feof($this->fh)){
			$this->response .= fread($this->fh, 1024);
		}

		//关闭连接
		$this->close();
	}

	//关闭连接
	public function close(){

	}
}

$url = ‘http://book.douban.com/subject/26376603/‘;

$http = new Http($url);
echo $http->get();

执行代码,输出:

图1

 

图2 响应信息

 

时间: 2024-10-11 10:30:23

HTTP 笔记与总结(3 )socket 编程:发送 GET 请求的相关文章

Socket编程发送get请求

发送GET请求以及响应信息如下图所示: 本文实现了PHP+Socket实现了发送GET并显示响应结果. [请求原理]: 1.     连接某URL的80端口打开 2.     发送头信息(写) 3.     读取网页内容 Socket操作远程文件和读取本地文件一样,把本地文件看成硬件传输,远程文件通过网络传输. [代码实现]: <span style="font-family:KaiTi_GB2312;font-size:14px;"><?PHP /* PHP + S

socket变成发送GET请求

可以根据几根url地址,分析出主机,地址,协议等,然后用封装成的类拼接成GET请求信息,用fsockopen连接主机,进行读取操作,获取响应信息,打印 <?php //http连接接口 interface proto{ //连接url public function conn($url); //发送get请求 public function get(); //发送post public function post($num); //关闭连接 public function close(); }

Java 通过Socket编程 发送和接收数据

Socket client = null; try{     client = new Socket(Ip,Port);     String msg="发送的数据内容!";     //得到socket读写流,向服务端程序发送数据       client.getOutputStream().write(msg.getBytes());     byte[] datas = new byte[2048];     //从服务端程序接收数据     client.getInputStr

JAVA学习笔记(五十九)- Socket编程

客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; /* * 客户端 */ public class Client { public static void main(String[] args) throws IOExcep

HTTP 笔记与总结(4 )socket 编程:批量发帖

浏览器发送 POST 请求: 表单 form.html <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="a.php" method="post"

Socket编程POST批量发帖

首先本文使用之前的一个留言板案例进行测试,案例连接:使用POST实现对留言板的留言.前面部分是关于步骤原理的讲解,后半部分是继续上一篇文章的代码实现.那么现在开始: 1.     留言页面如下: 先提交一个留言,然后抓包查看POST数据. 看见了这句话: <span style="font-family:KaiTi_GB2312;font-size:14px;">title=vEagleFly&author=vEagleFly&content=vEagleF

PHp + socket编程练习——博客园回复

因为也是学习的路上,先画出思路,代码和看别人的学习的,最后是根据的思路完成的,可能比较简单,后期在去完善和更改 <?php /** * php+socket 编程 发送HTTP请求 * @version c.php * 模拟博客园评论 */ interface Proto{ // 连接url public function conn($url); // 发送get请求 public function get(); // 发送post请求 public function post($body);

Android Socket编程学习笔记

通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 在java中,Socke

转 网络编程学习笔记一:Socket编程

网络编程学习笔记一:Socket编程 “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: