使用php发送get和post请求url的代码段
方法1: 用file_get_contents方法get方式获取网页内容:
<?php $url='http://luckxi.cn/';//请求地址url $html = file_get_contents($url); echo $html;//输出内容 ?>
方法2: 用fopen打开url并以get方式获取网页内容:
<?php
// 定义文件指针$fp,使用fopen函数打开一个URL或文件,并设置模式为只读'r'
$fp = fopen($url, 'r');
// 使用stream_get_meta_data获取流的元信息,这可以用来检查是否成功打开文件/URL
stream_get_meta_data($fp);
// 初始化一个空字符串$result用于存储从文件/URL读取的内容
$result = '';
// 当文件指针没有到达文件末尾时循环执行
while(!feof($fp)) {
// 每次从文件中读取最多1024字节的数据,并追加到$result变量中
$result .= fgets($fp, 1024);
}
// 输出完整的文件/URL内容
echo "url body: $result";
// 关闭文件指针$fp
fclose($fp);
?>方法3:用file_get_contents函数,以post方式获取url内容
<?php
$data = array ('foo' => 'bar');
$data = http_build_query($data);
$opts = array (
‘http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencodedrn",
"Content-Length: " . strlen($data) . "rn",
'content' => $data
)
);
$context = stream_context_create($opts);
$html = file_get_contents('http://luckxi.cn/e/admin/test.html', false, $context);
echo $html;
?>方法4:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen(注意需要 PHP.ini 中 allow_url_fopen 选项开启)
<?php
// 创建一个包含键值对的数组
$data = array ('foo' => 'bar');
// 将数组转换成适合HTTP POST请求的查询字符串格式
$data = http_build_query($data);
// 设置HTTP选项
$opts = array (
// HTTP协议相关的选项
'http' => array (
// 设置请求方法为POST
'method' => 'POST',
// 设置请求头
// 注意:这里的头信息格式有误,正确的格式应该是使用换行符("\r\n")而不是("rn")
'header'=> "Content-type: application/x-www-form-urlencoded\r\n", // 设置Content-Type
'Content-Length: ' . strlen($data) . "\r\n", // 设置Content-Length
// 设置POST请求体内容
'content' => $data
)
);
// 创建一个基于所提供的选项的流上下文
$context = stream_context_create($opts);
// 使用file_get_contents发起HTTP POST请求并获取返回的内容
// 第二个参数false表示使用自定义上下文
// 第三个参数是上面创建的上下文
$html = file_get_contents('http://luckxi.cn/e/admin/test.html', false, $context);
// 输出HTML内容
echo $html;
?>方法5:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
<?php
function HTTP_Post($URL, $data, $cookie, $referrer = "")
{
// 解析给定的URL,返回一个包含scheme、host、port、path等组件的数组
$URL_Info = parse_url($URL);
// 构建referrer,如果没有提供则设置一个默认值
if ($referrer == "") { // 如果没有提供referrer,则使用默认值"111"
$referrer = "111"; // 注意:这里硬编码了一个referrer值,实际使用时应根据需求调整
}
// 将$data数组转换成适合HTTP POST请求的字符串格式
foreach ($data as $key => $value) {
$values[] = "$key=" . urlencode($value); // 对每个值进行URL编码
}
$data_string = implode("&", $values); // 使用"&"连接键值对
// 查找所需的端口,如果没有指定,则使用标准端口(80)
if (!isset($URL_Info["port"])) {
$URL_Info["port"] = 80; // 默认HTTP端口
}
// 构建POST请求的头部信息
$request = "POST " . $URL_Info["path"] . " HTTP/1.1\r\n"; // 请求行
$request .= "Host: " . $URL_Info["host"] . "\r\n"; // 主机头
$request .= "Referer: " . $referrer . "\r\n"; // Referer头
$request .= "Content-type: application/x-www-form-urlencoded\r\n"; // 内容类型
$request .= "Content-length: " . strlen($data_string) . "\r\n"; // 内容长度
$request .= "Connection: close\r\n"; // 连接方式
// 添加Cookie头
$request .= "Cookie: " . $cookie . "\r\n";
// 添加一个空行来结束头部信息
$request .= "\r\n";
// 添加POST请求体
$request .= $data_string . "\r\n";
// 打开与目标主机的socket连接
$fp = fsockopen($URL_Info["host"], $URL_Info["port"]);
// 向socket写入完整的请求
fputs($fp, $request);
// 读取响应直到文件结束符
while (!feof($fp)) {
$result .= fgets($fp, 1024); // 每次读取最多1024字节
}
// 关闭socket连接
fclose($fp);
// 返回响应结果
return $result;
}
?>方法6:使用curl库,使用curl库之前(注意需要查看一下php.ini是否已经打开了curl扩展)
<?php // 初始化一个新的cURL会话 $ch = curl_init(); // 设置超时时间为5秒 $timeout = 5; // 设置cURL选项,包括请求的URL curl_setopt($ch, CURLOPT_URL, 'http://luckxi.cn/'); // 设置选项CURLOPT_RETURNTRANSFER,使cURL执行结果作为字符串返回,而不是直接输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置选项CURLOPT_CONNECTTIMEOUT,指定连接到服务器的最大时间(单位:秒) curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // 执行cURL会话 $file_contents = curl_exec($ch); // 关闭cURL会话 curl_close($ch); // 输出获取到的页面内容 echo $file_contents; ?>
Tips:值得注意的是,通常在发送请求的时候要考虑一下编码的问题,尤其是在处理中文和特殊符号,另外尽量是加上请求头和cookie,希望能帮到您~
