如何用php发送一个post请求并带数据

可以使用 PHP 内置的 curl 库来发送 POST 请求,并附带数据。以下是一个示例:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://example.com/api/endpoint",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => array(
    "field1" => "value1",
    "field2" => "value2"
  ),
));

$response = curl_exec($curl);

curl_close($curl);

echo $response;

在此示例中,我们使用 curl_init 初始化一个新的 cURL 会话,然后使用 curl_setopt_array 设置请求选项。接下来,我们使用 curl_exec 执行请求,并使用 curl_close 关闭 cURL 会话。请求的响应将作为字符串返回,您可以将其存储在变量 $response 中。

如果数据是文件形式,则可以使用 @ 符号将文件路径作为字段值提交。示例代码如下:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://example.com/api/endpoint",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => array(
    "field1" => "@/path/to/file1.jpg",
    "field2" => "@/path/to/file2.jpg"
  ),
));

$response = curl_exec($curl);

curl_close($curl);

echo $response;

在此示例中,我们以 @/path/to/file1.jpg 和 @/path/to/file2.jpg 的形式提交两个文件。请确保您的 PHP 脚本有权限读取这些文件。

如果需要将 cookie 一并发送到请求中,可以使用 CURLOPT_COOKIE 选项。以下是一个示例:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://example.com/api/endpoint",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => array(
    "field1" => "value1",
    "field2" => "value2"
  ),
  CURLOPT_COOKIE => "cookie1=value1; cookie2=value2",
));

$response = curl_exec($curl);

curl_close($curl);

echo $response;

在此示例中,我们使用 CURLOPT_COOKIE 选项将两个 cookie 作为字符串发送到请求中。请根据您自己的需求调整代码以发送正确的 cookie。

curl_setopt_array 函数接受一个数组,其中的每个元素都定义了 cURL 会话的特定选项。以下是常见的选项:

  • CURLOPT_URL:请求的 URL 地址。
  • CURLOPT_RETURNTRANSFER:将请求的结果作为字符串返回,而不是直接输出。
  • CURLOPT_ENCODING:请求返回的编码格式。
  • CURLOPT_MAXREDIRS:允许请求重定向的最大次数。
  • CURLOPT_TIMEOUT:请求的超时时间(以秒为单位)。
  • CURLOPT_FOLLOWLOCATION:是否跟随重定向请求。
  • CURLOPT_HTTP_VERSION:请求使用的 HTTP 版本。
  • CURLOPT_CUSTOMREQUEST:请求的类型(例如,GET、POST、PUT、DELETE)。
  • CURLOPT_POSTFIELDS:如果请求类型为 POST,则该选项定义了提交的数据。
  • CURLOPT_COOKIE:请求中要发送的 cookie。

这仅是一些常见的选项。cURL 还有其他很多选项,您可以在 cURL 官方文档中了解详情:https://curl.haxx.se/docs/manual.html

如果要使用 GET 方法发送请求,可以使用以下代码:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://example.com/api/endpoint?field1=value1&field2=value2",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_COOKIE => "cookie1=value1; cookie2=value2",
));

$response = curl_exec($curl);

curl_close($curl);

echo $response;

get请求数据可以为文件形式吗?
不可以。GET 请求的数据只能作为 URL 参数提交,而不能作为文件上传。如果需要上传文件,您需要使用 POST 请求,并使用 CURLOPT_POSTFIELDS 选项设置请求数据,可以设置为文件形式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTTP协议详解 HTTP协议是一个应用层的通信规范: 双方要进行通信, 大家都要遵守一个规范——HTTP协议。H...
    单板小智阅读 4,567评论 0 0
  • * 异步执行方法 * string $url 地址 * array $post_data 参数 */ public...
    陌丶猿阅读 5,853评论 0 0
  • php curl功能很强大,我们最经常用来做的是读取网页的HEADER头信息,但是其功能不仅限于此,还可以进行网页...
    小伙有点菜阅读 3,975评论 0 0
  • 一、什么是CURL? cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、...
    茶艺瑶阅读 10,116评论 0 6
  • 一、什么是CURL? cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、...
    伊Summer阅读 5,084评论 0 4