使用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,希望能帮到您~