PHP发送GET、POST请求的6种方法简明总结
在PHP中发送HTTP请求是比较常见的需求,本文将总结6种常用的方式,包括使用cURL和不使用cURL的方法。
1. 使用file_get_contents函数发送GET请求
file_get_contents函数可以读取文件内容,也可以用于发送GET请求。下面是一个例子:
$url = 'https://www.example.com/api/getdata?id=123';
$response = file_get_contents($url);
echo $response;
这里我们发送了一个GET请求,并将结果直接输出。需要注意的是,file_get_contents只适用于简单的GET请求,并不适用于POST请求。
2. 使用file_get_contents函数发送POST请求
使用file_get_contents函数发送POST请求需要结合stream_context_create函数来设置HTTP头。
$url = 'https://www.example.com/api/postdata';
$data = http_build_query(array('id' => '123', 'name' => '张三'));
$options = array('http' => array(
'header' => 'Content-Type: application/x-www-form-urlencoded\r\n' .
'Content-Length: ' . strlen($data) . '\r\n' .
'User-Agent:MyAgent/1.0\r\n',
'method' => 'POST',
'content' => $data
));
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
这里我们设置了HTTP头,包括Content-Type和Content-Length等字段,然后将请求内容通过content字段传递给服务器。
3. 使用cURL库发送GET请求
cURL是一个自由的跨平台支持多种通信协议的库。curl_init函数创建一个cURL对象,curl_setopt设置请求选项,curl_exec执行请求操作,curl_close释放cURL资源。
$url = 'https://www.example.com/api/getdata?id=123';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
4. 使用cURL库发送POST请求
要发送POST请求,我们需要设置curl_setopt的CURLOPT_POST选项为true,然后再设置CURLOPT_POSTFIELDS选项为POST请求的数据。
$url = 'https://www.example.com/api/postdata';
$data = array('id' => '123', 'name' => '张三');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
5. 使用fsockopen函数发送GET请求
fsockopen函数可以用于打开一个网络连接,可以使用它来发送HTTP请求。
$url = 'https://www.example.com/api/getdata?id=123';
$parsed_url = parse_url($url);
$fp = fsockopen($parsed_url['host'], 80, $errno, $errstr, 10);
if (!$fp) {
echo "Error: $errno - $errstr";
} else {
$out = "GET {$parsed_url['path']}?{$parsed_url['query']} HTTP/1.1\r\n";
$out .= "Host: {$parsed_url['host']}\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp,$out);
$response = '';
while (!feof($fp)) {
$response .= fgets($fp, 128);
}
fclose($fp);
echo $response;
}
6. 使用fsockopen函数发送POST请求
发送POST请求同样需要手动构造HTTP请求头和请求体。
$url = 'https://www.example.com/api/postdata';
$data = array('id' => '123', 'name' => '张三');
$parsed_url = parse_url($url);
$fp = fsockopen($parsed_url['host'], 80, $errno, $errstr, 10);
if (!$fp) {
echo "Error: $errno - $errstr";
} else {
$data = http_build_query($data);
$out = "POST {$parsed_url['path']} HTTP/1.1\r\n";
$out .= "Host: {$parsed_url['host']}\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: " . strlen($data) . "\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= $data;
fwrite($fp,$out);
$response = '';
while (!feof($fp)) {
$response .= fgets($fp, 128);
}
fclose($fp);
echo $response;
}
上述6种方法都是发起HTTP请求的常用方式,选择使用哪种方式需要根据你的项目需求和个人习惯来选择。
示例1:使用cURL库发送GET请求
function curl_get($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
$url = 'https://www.example.com/api/getdata?id=123';
$response = curl_get($url);
echo $response;
我们自定义了一个curl_get函数,它接收一个URL作为参数,并使用cURL库发送GET请求来获取返回结果。
示例2:使用fsockopen函数发送POST请求
function fsockopen_post($url, $data) {
$parsed_url = parse_url($url);
$fp = fsockopen($parsed_url['host'], 80, $errno, $errstr, 10);
if (!$fp) {
return "Error: $errno - $errstr";
} else {
$data = http_build_query($data);
$out = "POST {$parsed_url['path']} HTTP/1.1\r\n";
$out .= "Host: {$parsed_url['host']}\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: " . strlen($data) . "\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= $data;
fwrite($fp, $out);
$response = '';
while (!feof($fp)) {
$response .= fgets($fp, 128);
}
fclose($fp);
return $response;
}
}
$url = 'https://www.example.com/api/postdata';
$data = array('id' => '123', 'name' => '张三');
$response = fsockopen_post($url, $data);
echo $response;
我们自定义了一个fsockopen_post函数,它接收一个URL和一个数据数组作为参数,并使用fsockopen函数发送POST请求来获取返回结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php发送get、post请求的6种方法简明总结 - Python技术站