1.get方式,code来自于PHP手册:
<?php
$url='/new.php'.'?'.urlencode(id).'='.urlencode(88);
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
//上面的code可以模拟浏览器www.example.com/new.php?id=88
2.post方式:
<?php
$host='www.example.com';
$url='/login.php';
$data=urlencode(username).'='.urlencode($username).urlencode(password).'='.urlencode($password);
$fp=fsockopen("www.baidu.com",80,$errno,$errstr,30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "POST ".$url." HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Content-type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: ".$data."\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .=$data;
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
?>
//上面的code可以模拟用户登录www.example.com/login.php
3.get与post的异同:
-------------------------------------------------
HTTP请求报文:request-line
headers (0或有多个)
/***headers***/
//name1: content
//name2: content
//.....
/***headers***/
<blank line>
body (只对POST请求有效)
-------------------------------------------------
HTTP响应报文:status-line
headers (0或有多个)
/***headers***/
//name1: content
//name2: content
//.....
/***headers***/
<blank line>
body (只对POST请求有效)
-------------------------------------------------
从上面的报文格式可以看出,header之间的区分是换行"\r\n",header于body的区分是空白行,这就算为什么上面get、post最后都有"Connection: Close\r\n\r\n"原因。
get请求的url要经过urlencode编码,这就像浏览器的请求时看到的%23%23的一样,post请求的内容也要经过urlencode编码。
POST请求必需在header中加入"Content-type: application/x-www-form-urlencoded\r\n"和"Content-Length: ".$data."\r\n",post提交的数据要在"Connection: Close\r\n\r\n"之后发送,因为该数据相当请求的内容是在header之后的.
4.解析响应报文
也许我们只关心报文的头或者body,在报文格式中我们看到header于body的区分是空白行的。
$headers = "";
while ($str = trim(fgets($sock,4096)))
$headers .= "$str\n";
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
$this->responseText=$body;
//通过上面的代码就可以将header于body分开
字符串为空时(即空白行)其bool值为false,这样就把header与body分开了。
BTW-参考资料:《TCP/IP详解》卷三13章HTTP
HTTPClient类:http://scripts.incutio.com/httpclient/
分享到:
相关推荐
### fsockopen函数详解 在PHP中,`fsockopen`是...通过合理使用该函数,可以轻松实现各种网络通信需求,包括HTTP请求、FTP操作等。理解其参数含义、返回值以及如何处理错误,对于开发高效可靠的网络应用程序至关重要。
使用`fsockopen`实现GET请求,你需要构建URL,包括查询字符串,然后将数据发送到服务器。以下是一个简单的GET请求示例: ```php $url = 'http://example.com/index.php?name=value'; $host = parse_url($url, ...
本文实例讲述了PHP实现模拟http请求的方法。分享给大家供大家参考,具体如下: 在http简析中,我们提到了浏览器请求资源的一个流程,那么这个流程能不能用php来模拟呢?答案是肯定的。 php模拟http请求需要实现以下...
##### 示例1:使用fsockopen伪造HTTP请求 ```php $fp = fsockopen("passport.baidu.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr($errno) \n"; } else { $msg = "GET /?login&username=...
通过fsockopen函数实现的HTTP请求,通常需要手动处理HTTP协议的细节,所以在实际开发中,如果仅仅是发送HTTP请求获取网页内容,建议使用cURL或者HTTP流包装器等更高级的功能,它们提供了更简洁和强大的接口来处理...
在Web开发中,发送HTTP请求是一种常见的需求。PHP作为一种广泛使用的服务器端脚本语言,提供了多种方式来构造和发送HTTP请求。本文档将详细介绍如何使用PHP来构造HTTP头部并发送请求。 #### 二、HTTP请求的基本构成...
使用`fsockopen`的场景广泛,它可以用于执行HTTP POST或GET请求、执行FTP操作、与其他服务器进行数据交换等。在上述例子中,我们看到如何通过Socket编程实现简单的通信,这为自定义协议或扩展现有协议提供了基础。 ...
总结来说,cURL和fsockopen都是PHP中实现HTTP请求的方法,各有优势。cURL更适合大多数情况,因为它提供了丰富的功能和便利性;而fsockopen则适用于需要更多控制权和优化性能的场景。选择哪种方法取决于具体的需求和...
这个类中,我们首先解析URL获取主机名和路径,然后构建HTTP请求头和POST数据,最后通过fsockopen、fsockwrite和fclose操作套接字发送请求并接收响应。 总结来说,cURL是功能最全面的选择,适合复杂的HTTP请求;`...
这个函数通过构造HTTP请求头并发送,然后关闭连接,实现了快速发送请求而无需等待响应。然而,这种方法不适用于需要传递数据的情况,如果需要POST数据,可以在HTTP头中添加POST内容。 当fsockopen不可用或不适用时...
fsockopen是PHP中的一个函数,用于打开一个到网络服务器的套接字连接,这使得开发者可以直接处理HTTP请求,而不仅仅是获取内容。在这个特定的类中,开发者可以更灵活地处理HTTP头信息,这对于某些需要分析HTTP响应头...
在PHP中,模拟ASP中的XMLHttpRequest来实现HTTP请求是一项常见的任务,这主要涉及到网络通信和HTTP协议的理解。XMLHttpRequest在JavaScript中广泛用于实现AJAX(异步JavaScript和XML)技术,而在PHP中,我们可以创建...
// 准备HTTP请求头信息 $request = "GET $page HTTP/1.0\r\n"; $request .= "Host: $host\r\n"; $request .= "Referer: ***\r\n"; $request .= "User-Agent: PHP test client\r\n\r\n"; // 发送HTTP请求头信息 ...
其中,fsockopen()函数用于打开一个网络连接的socket,然后可以通过fwrite()函数向服务器发送HTTP请求数据,再通过fgets()函数读取响应。这种方法可以提供更底层的网络通信细节,但同时也需要程序员对网络协议有较为...
`fsockopen`函数是PHP提供的一种低级网络通信接口,它允许开发者直接打开到TCP/IP端口的连接,从而实现HTTP的GET和POST请求。本文将详细介绍如何利用`fsockopen`进行GET和POST请求,以及如何处理文件上传。 1. GET...
本文将详细介绍两种实现此功能的方法:fsockopen和cURL。 1. **fsockopen方法** fsockopen是PHP内置的一个网络连接函数,它可以打开到指定服务器的TCP/IP套接字连接。以下是如何使用fsockopen来实现表单自动提交的...